2013-04-15 61 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內部結構。