Mysql 并发选择和删除

Mysql 并发选择和删除,mysql,database-concurrency,Mysql,Database Concurrency,我有两笔交易。在创建后为post分配标记的程序(事务B)。另一个事务(事务A)删除任何post不再使用的标记。这是在删除后完成的 交易A SELECT COUNT(*) FROM post_tags WHERE tag_id = 45; DELETE FROM tag WHERE id = 45; 交易B SELECT id FROM tag WHERE name = 'rss'; -- Now, foreign key violation INSERT INTO post_tags(po

我有两笔交易。在创建后为post分配标记的程序(事务B)。另一个事务(事务A)删除任何post不再使用的标记。这是在删除后完成的

交易A

SELECT COUNT(*) FROM post_tags WHERE tag_id = 45;
DELETE FROM tag WHERE id = 45;
交易B

SELECT id FROM tag WHERE name = 'rss';
-- Now, foreign key violation
INSERT INTO post_tags(post_id, tag_id) VALUES(123, 45);
交易A

SELECT COUNT(*) FROM post_tags WHERE tag_id = 45;
DELETE FROM tag WHERE id = 45;
交易B

SELECT id FROM tag WHERE name = 'rss';
-- Now, foreign key violation
INSERT INTO post_tags(post_id, tag_id) VALUES(123, 45);
我知道我可以在这两个事务中使用SELECT进行更新,但我不想锁定只分配标记的事务。
我希望它们仅在有事务试图删除标记时锁定。

使用可重复读取事务隔离级别……这可能有助于uIs事务a删除标记的目的,而不使用POST?如果是-它什么时候运行(在某个事件或cron作业上)?@Vatev是,它会删除标记而不发布。它在post-remove之后运行(如果解决了这个问题,我可以让它在cron作业上运行),为什么不按照这里的描述在DELETE-CASCADE上使用呢