您遇到了一個困境:使用單一表同時將資料插入多個表中MySQL 查詢。然而,您發現這是不可能的。為了克服這個挑戰,您考慮使用多個查詢:
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 命令中的表中,您可以利用事務。具體方法如下:
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 變量:
INSERT ... SELECT LAST_INSERT_ID() INTO @mysql_variable_here; INSERT INTO table2 (@mysql_variable_here, ...); INSERT INTO table3 (@mysql_variable_here, ...);
2.使用PHP 或其他語言變量:
注意事項事務一致性
將查詢包裝在事務中以確保資料一致性至關重要,這意味著要麼所有查詢成功,要麼沒有查詢成功。如果執行在查詢之間中斷,則某些表可能已插入記錄,而其他表則沒有。交易保證這種情況不會發生。
以上是如何同時向多個MySQL表插入資料並保持資料完整性?的詳細內容。更多資訊請關注PHP中文網其他相關文章!