2013-04-15 30 views
2

我知道显而易见的答案是否定的。但是,在表上触发insert,updatedelete触发器会以任何方式影响同一个表的select语句吗?做mysql触发器会为select语句产生额外的开销吗?

+2

我对这个问题的直接反应是,如果你走到我的办公桌前问我会是“你为什么问?”。如果只是好奇心,那么简单的“否”就足够了,但这听起来像是[XY问题]的表现(http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)对我来说... – DaveRandom

回答

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内部结构。