我是MySQL的新手,所以请保持友善:)
我想将php表单中的数据插入到3个不同的表中,这些表都有外键。如何编写一个一次更新所有3个表的插入命令,因为如果我尝试手动更新表,那么由于缺少引用而出现错误。 我是否必须处理“NULL”条目并逐个更新每个表,或者是否可以使用一个命令解决此问题?像MySQLi_Multi_Query?
非常感谢!
答案 0 :(得分:25)
你可以用3种方法做到:
第一&推荐的。在插入值中使用SELECT:
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);
二。在插入值中使用LAST_INSERT_ID:
INSERT INTO a (id)
VALUES ('anything');
INSERT INTO user_details (id, weight, height)
VALUES (LAST_INSERT_ID(),83, 185);
第三。使用PHP SCRIPT
<?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 );
?>
答案 1 :(得分:6)
你最有可能必须按照依赖顺序插入东西。因此,如果您有三个表(A,B和C),我们假设C依赖于B而B取决于A.我们还假设每个表分别具有主键AID,BID和CID。
答案 2 :(得分:2)
方法1的语法有错误。
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);
答案 3 :(得分:0)
1) foreign_key的含义是将字段中的值与其他位置的pre_existing值相关联。因此,您应该按逻辑顺序进行插入。
2) 如果你想避免逻辑限制,你应该
SET foreign_key_checks = 0 // disable key checks in server
INSERT ... // any order
INSERT ...
...
SET foreign_key_checks = 1