簡體   English   中英

如果一個表是聯結表,如何通過一個查詢插入到兩個表?

[英]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設置為01 ,則此方法適用於InnoDB,因為可以保證生成的ID是連續的。

在將innodb_autoinc_lock_mode設置為0(“傳統”)或1(“連續”)的情況下,任何給定語句生成的自動增量值都是連續的,沒有間隙,因為表級AUTO-INC鎖定將一直保持到結束。語句,一次只能執行一個這樣的語句。

InnoDB中的AUTO_INCREMENT處理

LAST_INSERT_ID()將返回插入的第一行的ID。

如果你使用一個INSERT語句插入多行, LAST_INSERT_ID() 返回第一個插入的行所產生的價值。

信息功能-LAST_INSERT_ID()

您知道第一個生成的ID。 您知道插入的行數。 這樣您就知道要復制哪些行。

演示: http//rextester.com/UEN69961

暫無
暫無

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

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