我有两笔交易。在创建后分配标签以发布的一种(事务 B)。另一个事务(事务 A)删除不再被任何帖子使用的标签。它是在删除后完成的。
交易A
SELECT COUNT(*) FROM post_tags WHERE tag_id = 45;
交易 B
SELECT id FROM tag WHERE name = 'rss';
交易A
DELETE FROM tag WHERE id = 45;
交易 B
-- Now, foreign key violation
INSERT INTO post_tags(post_id, tag_id) VALUES(123, 45);
我知道我可以在两个事务中使用 SELECT FOR UPDATE,但我不想锁定只分配标签的事务。我希望它们仅在有尝试删除标签的事务时才锁定。