可能的并发问题 - 如何解决?

时间:2016-08-02 08:42:58

标签: php mysql mysqli

我有一个关于通过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,因为没有提交。如果是这样的话怎么解决呢?

0 个答案:

没有答案
相关问题