我需要一次运行多个查询.在下面您可以看到一个示例.
我如何确定在表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.