[英]How to insert to two tables with one query if one table is a junction table?
如何僅使用一個查詢將值插入兩個表? 我正在使用MySQL。 我要插入的表之一是多對多關系表。 請在下面查看我的示例:
我最近添加了多對多關系表。 當我插入新聞時,鍵入以下腳本:
INSERT INTO news (title, reporter_id)
VALUES ('Some Title', 15);
我怎樣才能有一個查詢才能插入兩個表? 每個MySQL插入文檔 ,似乎我可以像
INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);
問題是,在執行第一次插入操作之前,我不知道news_id。 我應該只有兩個插入語句還是有更好的方法? 謝謝你的幫助!
正如Uueerdo在評論中提到的那樣,您可以使用AFTER INSERT觸發器並使用NEW.id
訪問生成的ID。 但是,如果要在應用程序層中保留該邏輯,則可以使用以下命令將數據從第一個表復制到第二個表:
start transaction;
insert into news(title, reporter_id) values
('title2', 2),
('title3', 3);
insert into junctions(news_id, reporter_id)
select id, reporter_id
from news
where id >= last_insert_id()
order by id asc
limit 2;
commit;
如果將innodb_autoinc_lock_mode
設置為0
或1
,則此方法適用於InnoDB,因為可以保證生成的ID是連續的。
在將
innodb_autoinc_lock_mode
設置為0(“傳統”)或1(“連續”)的情況下,任何給定語句生成的自動增量值都是連續的,沒有間隙,因為表級AUTO-INC鎖定將一直保持到結束。語句,一次只能執行一個這樣的語句。
LAST_INSERT_ID()
將返回插入的第一行的ID。
如果你使用一個INSERT語句插入多行,
LAST_INSERT_ID()
只返回第一個插入的行所產生的價值。
您知道第一個生成的ID。 您知道插入的行數。 這樣您就知道要復制哪些行。
演示: http : //rextester.com/UEN69961
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.