gpt4 book ai didi

mysql - 触发器是异步的吗?

转载 作者:可可西里 更新时间:2023-11-01 07:21:27 24 4
gpt4 key购买 nike

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

因此,每当我在表 B 中插入一个用户时,我都希望根据用户的插入或删除来增加/减少计数。

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

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

这个假设是否正确,或者两种方法都将花费相同的时间。

注意:我不关心表 A 中更新计数的时间。因此我正在寻找一种以非阻塞模式(如在队列中)执行同步作业的方法!

有什么建议/意见吗?

最佳答案

不,触发器以与存储过程相同的方式绝对同步地执行。这意味着如果你开始做一些事情,比如在触发器中更新计数,你可以让一个使用自动提交执行的简单查询在事务中做很多工作,因此很可能会死锁。你应该意识到这一点。

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

关于mysql - 触发器是异步的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3064951/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com