我是MySQL的新手,请多关照 :)
我想从PHP表单中插入数据到三个不同的表中,这些表都有外键。我该如何编写一个插入命令来同时更新这三个表呢?因为如果我尝试手动更新表,则由于缺少引用而出现错误。 我需要处理“NULL”条目并逐个更新每个表吗?还是可以用一个单一的命令解决这个问题?就像MySQLi_Multi_Query这样的命令?
非常感谢!
我是MySQL的新手,请多关照 :)
我想从PHP表单中插入数据到三个不同的表中,这些表都有外键。我该如何编写一个插入命令来同时更新这三个表呢?因为如果我尝试手动更新表,则由于缺少引用而出现错误。 我需要处理“NULL”条目并逐个更新每个表吗?还是可以用一个单一的命令解决这个问题?就像MySQLi_Multi_Query这样的命令?
非常感谢!
第二点。在INSERT VALUE中使用LAST_INSERT_ID:
INSERT INTO user (name) VALUES ('John Smith'); INSERT INTO user_details (id, weight, height) VALUES ((SELECT id FROM user WHERE name='John Smith'), 83, 185);
INSERT INTO a (id) VALUES ('anything'); INSERT INTO user_details (id, weight, height) VALUES (LAST_INSERT_ID(),83, 185);
第三步. 使用PHP脚本
<?php // Connecting to database $link = mysql_connect($wgScriptsDBServerIP, $wgScriptsDBServerUsername, $wgScriptsDBServerPassword, true); if(!$link || !@mysql_SELECT_db($wgScriptsDBName, $link)) { echo("Cant connect to server"); exit; } // Values to insert $name = 'John Smith'; $weight = 83; $height = 185; // insertion to user table $sql = "INSERT INTO user (name) VALUES ('$name')"; $result = mysql_query( $sql,$conn ); // retrieve last id $user_id = mysql_insert_id( $conn ); mysql_free_result( $result ); // insertion to user_details table $sql = "INSERT INTO user_details (id, weight, height) VALUES ($user_id, $weight, $height)"; $result = mysql_query( $sql,$conn ); mysql_free_result( $result ); ?>
您很可能需要按照它们的依赖关系插入内容。因此,如果您有三个表(A、B和C),我们假设C依赖于B,B依赖于A。我们还假设每个表分别具有主键AID、BID和CID。
INSERT INTO user_details (id, weight, height)
VALUES (SELECT(id FROM user WHERE name='John Smith'), 83, 185);
应该是
INSERT INTO user_details (id, weight, height)
VALUES ((SELECT id FROM user WHERE name='John Smith'), 83, 185);
1) foreign_key 的意义在于将一个字段中的值与其他地方的预先存在的值关联起来。因此,您应该按逻辑顺序进行插入。
2) 如果您想避免逻辑限制,您应该
SET foreign_key_checks = 0 // disable key checks in server
INSERT ... // any order
INSERT ...
...
SET foreign_key_checks = 1