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

Cra*_*ayl 9 mysql

我是MySQL的新手,所以请你好:)

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

非常感谢你!

Mee*_*hal 26

你可以用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);
Run Code Online (Sandbox Code Playgroud)

第二.在插入值中使用LAST_INSERT_ID:

INSERT INTO a (id)
     VALUES ('anything');
INSERT INTO user_details (id, weight, height)
     VALUES (LAST_INSERT_ID(),83, 185);
Run Code Online (Sandbox Code Playgroud)

第三.使用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 );
?>
Run Code Online (Sandbox Code Playgroud)

  • 小心第一个和推荐的建议。假设只有一个“John Smith”。如果 name 不是 UNIQUE 列,那就是自找麻烦。使用 LAST_INSERT_ID() 是要走的路。 (2认同)

Cor*_*lin 6

你最有可能必须按照依赖顺序插入东西.因此,如果您有三个表(A,B和C),我们假设C依赖于B而B取决于A.我们还假设每个表分别具有主键AID,BID和CID.

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