mysql-如何一次处理多个插入

我需要一次运行多个查询.在下面您可以看到一个示例.
我如何确定在表A上进行插入并将最后一个插入ID存储在变量中之后,如果同时发生另一次插入,它将是在其他表上插入的正确值?我是否必须锁定所有表,运行查询然后解锁表?我读了一些有关交易的东西.我需要他们吗?
感谢您的任何建议.

create table a (
id int not null auto_increment primary key,
name varchar(10)
) engine = innodb;

create table b (
id int not null auto_increment primary key,
id_a int
) engine innodb;

create table c (
id int not null auto_increment primary key,
id_a int)
engine innodb;

insert into a (name) values ('something');
set @last_id = last_insert_id();
insert into b (id_a) values (@last_id);
insert into c (id_a) values (@last_id);

解决方法:

按此顺序

insert into a (name) values ('something');
set @last_id = last_insert_id();
insert into b (id_a) values (@last_id);
insert into c (id_a) values (@last_id);

变量@last_id是全局变量,但对于您的特定会话而言是唯一的.因此,一旦设置,该值就不会更改,除非您再次对其进行更改.

至于last_insert_id(),特别是manual状态

The ID that was generated is maintained in the server on a per-connection basis.

因此,其他连接做什么都没有关系.确保b和c的插入使用为a生成的id.

上一篇:zookeeper集群崩溃处理


下一篇:c# – 为什么需要冗余锁定对象?