
在 MySQL 中插入多個表格:這可能還是資料庫規範化問題?
您遇到了一個困境:使用單一表同時將資料插入多個表中MySQL 查詢。然而,您發現這是不可能的。為了克服這個挑戰,您考慮使用多個查詢:
1 2 | INSERT INTO users (username, password) VALUES( 'test' , 'test' )
INSERT INTO profiles (userid, bio, homepage) VALUES( '[id of the user here?]' , 'Hello world!' , 'http://www.stackoverflow.com' )
|
登入後複製
但是現在您面臨一個新問題:如何將 users 表中的自動增量 ID 分配給profile表?
答案:利用事務
雖然你不能插入多個在單一 MySQL 命令中的表中,您可以利用事務。具體方法如下:
1 2 3 4 5 6 | BEGIN;
INSERT INTO users (username, password)
VALUES( 'test' , 'test' );
INSERT INTO profiles (userid, bio, homepage)
VALUES(LAST_INSERT_ID(), 'Hello world!' , 'http://www.stackoverflow.com' );
COMMIT;
|
登入後複製
理解 LAST_INSERT_ID()
LAST_INSERT_ID() 函數可讓您重複使用自動增量值。在第二個語句中,LAST_INSERT_ID() 將自動擷取在第一個語句中插入的自動增量資料列的值。
替代方法
1。使用MySQL 變量:
1 2 3 4 | INSERT ...
SELECT LAST_INSERT_ID() INTO @mysql_variable_here;
INSERT INTO table2 (@mysql_variable_here, ...);
INSERT INTO table3 (@mysql_variable_here, ...);
|
登入後複製
2.使用PHP 或其他語言變量:
- 插入初始記錄
- 使用您的語言檢索LAST_INSERT_ID()
- 使用以下指令插入後續表PHP/語言變數
注意事項事務一致性
將查詢包裝在事務中以確保資料一致性至關重要,這意味著要麼所有查詢成功,要麼沒有查詢成功。如果執行在查詢之間中斷,則某些表可能已插入記錄,而其他表則沒有。交易保證這種情況不會發生。
以上是如何同時向多個MySQL表插入資料並保持資料完整性?的詳細內容。更多資訊請關注PHP中文網其他相關文章!