mysql - MyISAM 和触发器原子性

标签 mysql triggers innodb myisam atomic

假设我在 MyISAM 表上进行了一些操作(让它成为 INSERT),并附加了触发器。

我知道 MySQL 在运行此 INSERT 时会执行隐式表锁定。

问题:触发器会在这个隐式锁内部运行吗?触发器中使用的表会被这个锁锁定吗?

换句话说,触发器的执行是原子操作(例如我的 INSERT)的一部分吗?

顺便说一句,InnoDB 怎么样?相同?触发器是否包含在显式事务中?

最佳答案

InnoDB 查询在隐式事务中运行。

它实际上运行事务中的所有内容。 “无事务”模式通过每个语句后的隐式提交来模拟(“启动事务”会禁用自动隐式提交)。

此事务包括为查询运行的所有触发器,以及外键的共享模式锁。

使用 MyISAM,触发器将锁定它修改的任何表,就像普通查询一样。它是否是原子的 - 我不知道。

关于mysql - MyISAM 和触发器原子性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48252471/

相关文章:

MySQL:如何合并三个表

Mysql、InnoDB 到 MyISAM 进行全文索引

MySQL 删除子查询需要数百秒,而选择查询成本要低得多

mysql - 将MyISAM转换为InnoDb错误时间日期格式

php - 插入时出错

php - mysql如何合并一个表中相似的记录

php - 正在尝试检索个人资料图片

triggers - Apache Airflow - 完成时触发/安排 DAG 重新运行(文件传感器)

sql-server - CREATE TRIGGER 必须是批处理中的第一个语句

azure - 计时器触发的Azure函数不规则执行