更新时间:2023-10-23 GMT+08:00

相同表的并发UPDATE

事务T1:

1
2
3
START TRANSACTION;
UPDATE test SET address='test1234' WHERE name='test1';
COMMIT;

事务T2:

1
2
3
START TRANSACTION;
UPDATE test SET address='test1234' WHERE name='test2';
COMMIT;

事务T3:

1
2
3
START TRANSACTION;
UPDATE test SET address='test1234' WHERE name='test1';
COMMIT;

场景1:

开启事务T1,不提交的同时开启事务T2,事务T1开始执行UPDATE,事务T2开始执行UPDATE,事务T1和事务T2都执行成功。更新不同行时,更新操作拿的是行级锁,不会发生冲突,两个事务都可以执行成功。

场景2:

开启事务T1,不提交的同时开启事务T3,事务T1开始执行UPDATE,事务T3开始执行UPDATE,事务T1执行成功,事务T3等待超时后会出错。更新相同行时,事务T1未提交时,未释放锁,导致事务T3执行不成功。