我有一个关于通过PHP进行事务处理的问题。请注意我已经检查了以下问题,但并不完全满意。
Get the new record primary key ID from mysql insert query?
MySQL get Primary Key after Insert Statment
在第一个问题中,Duncan解释说会出现并发问题并需要通过PHP来解决它。但我不知道该怎么做。
让我先给你一个数据库结构。
create table T1 (
id int NOT NULL AUTO_INCREMENT,
name varchar(10),
PRIMARY KEY (id)
)
create table T2 (
id int NOT NULL AUTO_INCREMENT,
T1_id int not null,
name varchar(10),
PRIMARY KEY (id),
FOREIGN KEY (T1_id) references T1(id)
)
create table T3 (
id int NOT NULL AUTO_INCREMENT,
T1_id int not null,
name varchar(10),
PRIMARY KEY (id),
FOREIGN KEY (T1_id) references T1(id)
)
现在我必须通过PHP Webservice一次性将数据插入到这些中。所以在PHP代码中,我连续执行这四个查询 -
(Q1) insert into T1 (name) values ('ABC');
(Q2) pk = SELECT LAST_INSERT_ID();//pseudocode
(Q3) insert into T2 (T1_id, name) values (pk, 'XYZ');
(Q4) insert into T3 (T1_id, name) values (pk, 'MNP');
在执行开始时,我将自动提交设置为false,然后根据执行提交/回滚的成功或失败。
但是不会有任何并发问题吗?假设在我们开始并发测试之前T1有两行。所以当Q2为用户U1执行时, 他/她将3,而用户U2也将获得3,因为没有提交。如果是这样的话怎么解决呢?