簡體   English   中英

MySQL - 如何使用外鍵插入多個表

[英]MySQL - How to insert into multiple tables with foreign keys

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

我想將php表單中的數據插入到3個不同的表中,這些表都有外鍵。 如何編寫一個一次更新所有3個表的插入命令,因為如果我嘗試手動更新表,那么由於缺少引用而出現錯誤。 我是否必須處理“NULL”條目並逐個更新每個表,或者是否可以使用一個命令解決此問題? 像MySQLi_Multi_Query一樣?

非常感謝你!

你可以用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 );
?>

你最有可能必須按照依賴順序插入東西。 因此,如果您有三個表(A,B和C),我們假設C依賴於B而B取決於A.我們還假設每個表分別具有主鍵AID,BID和CID。

  1. 您將行插入A並獲得AID。
  2. 然后,您將使用從步驟1獲得的AID將行插入到B中。
  3. 然后你用你從第2步(也許是1)得到的BID(也許是AID)將你的行插入C

方法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);

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM