如何只使用一个查询将值插入两个表?我正在使用MySQL。我要插入的表之一是多对多关系表。请参阅下面的示例:
我最近添加了多对多关系表。当我在新闻上插入时,我输入以下脚本:
INSERT INTO news (title, reporter_id)
VALUES ('Some Title', 15);
如何让一个查询能够插入到两个表中?每个MySQL插入documentation,似乎我可以像
那样进行查询INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);
问题是,在我执行第一次插入之前,我不知道我的news_id。我应该只有两个插入语句还是有更好的方法?谢谢你的帮助!
答案 0 :(得分:0)
正如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锁定保持到语句结束,并且一次只能执行一个这样的语句。
AUTO_INCREMENT Handling in InnoDB
LAST_INSERT_ID()
将返回第一个插入行的生成ID。
如果使用单个INSERT语句插入多行,
LAST_INSERT_ID()
将返回为第一个插入的行仅生成的值。
Information Functions - LAST_INSERT_ID()
您知道第一个生成的ID。您知道插入的行数。所以你知道要复制哪些行。