mySQL事务竞争条件问题

时间:2013-09-10 03:51:32

标签: mysql transactions race-condition

我有两个并发事务,使用mySQL inno db

T1:

select row from table A
if row exists
    insert row in table B with fk to table A
else
    insert row in table A
    insert row in table B with fk to table A

T2:

delete row from table A (same row as T1 is selecting/updating)

问题是,T1执行并且行存在,所以它尝试在表B中插入fk到表A,但是在插入之前,T2执行,删除表A行,然后提交,现在T1将无法插入在表B中,因为表A中没有行。 T1和T2不应序列化吗? T1执行第一个,或T2,但不是两个混合。我知道这可以使用select for update语句来修复,但是实际逻辑比这更复杂,完全锁定表会真正损害性能。

0 个答案:

没有答案