MySQL 插入多個表:資料庫規範化
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;
檢索自動增量值
要將自動增量id從users表插入profiles表中,可以使用LAST_INSERT_ID()函數。但是,如果後續插入語句插入到具有自己的自動增量列的表中,則 LAST_INSERT_ID() 值將更新為該表的值。
要保留原始 LAST_INSERT_ID() 值,您可以儲存它位於事務內的自訂變數中。
使用 MySQL變數:
INSERT ... SELECT LAST_INSERT_ID() INTO @mysql_variable_here; INSERT INTO table2 (@mysql_variable_here, ...);
使用語言變數:
// PHP example $mysqli->query("INSERT INTO table1 ..."); $userid = $mysqli->insert_id; $mysqli->query("INSERT INTO table2 ($userid, ...)");
注意
插入時考慮資料庫一致性很重要多張桌子。如果中斷,事務會確保所有查詢要么完全執行,要么根本不執行。如果沒有事務,部分插入可能會導致不一致。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3