mysql – 触发器是异步的吗?

我有一个表A,它维护表B中的总用户数.我只关心表A中的计数与表B中的用户数同步.

因此,每当我在表B中插入用户时,我希望根据用户插入或删除来递增/递减计数.

有两种方法: –
a)如果我在表B中插入行,我可以在一个存储过程中在表A上发出更新计数.这导致两个命令插入后跟更新.因此说需要2秒. (假设每秒txn在1秒内)

b)我可以在存储过程中编写insert命令.此外,定义一个触发器,在表A中的插入完成后更新表A中的计数.对我来说,这只需要1秒的时间,这只是在表B中插入行.我假设更新表B中的计数的’after insert trigger’在后台发生,因此是异步或非阻塞的.

这种推定是正确的还是两种方法都需要相同的时间.

注意:我不关心表A中更新计数的时间.因此,我正在寻找一种在非阻塞模式下执行同步作业的方法,就像在队列中一样!

任何建议/意见?

解决方法:

不,触发器以与存储过程相同的方式绝对同步执行.这意味着如果您开始执行更新触发器中的计数等操作,则可以使用autocommit执行简单查询,在事务中执行大量工作,因此很可能会死锁.你应该知道这一点.

如果你不希望它同步,我想你可以让它插入一个挂起的更改表,然后有一个异步进程来更新它.从长远来看,这可能会避免很多死锁(插入没有二级索引的表不能与另一个插入到同一个表中的死锁,AFAIK)

上一篇:如何避免MySQL中的循环触发器依赖


下一篇:Mysql触发性能vs php手动插入