在高度交易系统中触发

use*_*230 5 mysql triggers transactions

我们正在创建一个高度事务性的系统,MySQL作为DB(innodb引擎).我们在表t1上有一个插入和更新触发器,它正在更新表t2和t3.我们观察到,只要并发用户量很高,我们就会在表t1上进行死锁.我们假设触发器发出一个表锁,直到它完成它的执行.我们在t1上放下了触发器,令人惊讶的是没有死锁了.

我的问题:

  1. 是否建议在高度事务性系统中使用触发器
  2. 如果不触发我们实现相同逻辑的其他选项.

表t1具有大约70,000行并且每天增加.

感谢任何输入.

提前致谢.

Joh*_*ica 0

您可以使用事务来代替并在客户端进行所有处理。

START TRANSACTION;

insert into t1;
update t2;
update t3;

COMMIT;
Run Code Online (Sandbox Code Playgroud)

如果您可以使用客户端提供的数据,请尝试不要使用“更新选择”和“插入选择”结构。此外,InnoDB 使用行锁定,这比 MyISAM 使用的表锁定更好。