我有两个并发事务,使用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语句来修复,但是实际逻辑比这更复杂,完全锁定表会真正损害性能。