MySQL - 如何使用外键插入多个表

时间:2010-12-30 18:29:52

标签: mysql

我是MySQL的新手,所以请保持友善:)

我想将php表单中的数据插入到3个不同的表中,这些表都有外键。如何编写一个一次更新所有3个表的插入命令,因为如果我尝试手动更新表,那么由于缺少引用而出现错误。 我是否必须处理“NULL”条目并逐个更新每个表,或者是否可以使用一个命令解决此问题?像MySQLi_Multi_Query?

非常感谢!

4 个答案:

答案 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。

  1. 您将行插入A并获得AID。
  2. 然后,您将使用从步骤1获得的AID将行插入B.
  3. 然后你用你从第2步(也许是1)获得的BID(也许是AID)将你的行插入C中

答案 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