我有两个并发事务,使用 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 执行并且行存在,所以它尝试使用 fk 在表 B 中插入表 A,但是在插入之前,T2 执行,删除表 A 行并提交,现在 T1 将无法插入表 B因为表 A 中没有行了。T1 和 T2 不应该序列化吗?要么先执行 T1,要么先执行 T2,但不能同时执行两者。我知道这可以使用 select for update 语句来锁定来解决,但实际的逻辑比这要复杂得多,完全锁定一个表真的会损害性能。