2

我知道显而易见的答案是否定的。但是,在一个表上使用任何insertupdatedelete触发器是否会以任何方式影响对同一个表的 select 语句?

4

1 回答 1

2

没有。100%

MySQL 仅在 sql_delete.cc、sql_insert.cc 和 sql_update.cc 中处理触发器。

请参阅 mysql-5.5/sql 目录中的源代码。例如在http://bazaar.launchpad.net/~mysql/mysql-server/5.5/view/head:/sql/sql_insert.cc搜索字符串“process_triggers”。它是一个抽象插入,独立于具体的处理程序实现。

当我们在http://bazaar.launchpad.net/~mysql/mysql-server/5.5/view/head:/sql/sql_select.cc查看源的“选择”部分时,我们只是看不到任何“触发器”在代码中(在评论中只有 3 次)。

因此,我可以正式向您报告,在选择期间,触发器不会在任何地方受到影响——仅在 DML 语句上。

ps:见http://dev.mysql.com/doc/internals/en/guided-tour-skeleton.html从鸟瞰了解 MySQL 内部结构。

于 2013-04-15T13:43:46.210 回答