触发器仅对查询执行一次后台操作

trigger performing background action only once for a query

给出示例触发器:

CREATE TRIGGER example BEFORE UPDATE ON example_table FOR EACH ROW <DO STUFF>;

如果我正确理解了触发器的 mysql 文档,那么会为受影响的每一行调用触发器。因此,如果我 运行 对 example_table 的更新查询 which WHERE 子句匹配多行,那么触发器将被调用多次并且 <DO STUFF> 将被执行多次。但是,如果我只想在 table 上对每个更新查询执行一个操作(例如基本操作日志记录),这是不方便的。

是否有触发器(等效项)允许我对 table 的每个查询执行一个操作?

一个澄清的例子:

想要的触发器:

CREATE TRIGGER example BEFORE UPDATE ON example_table DO ONCE INSERT INTO logging_table (time, table, action) VALUES (timestamp(), 'example_table', 'UPDATE');

example_table:

 id | name 
---------------
 1  | "George"
 2  | "Gina"
 3  | "Garfield"

查询涉及 example_table 中的多个元素:

UPDATE example_table WHERE id < 4 SET name = "NO ONE"

生成的日志记录table

     time       |     table     | action
------------------------------------------
20180215 114244 | example_table | UPDATE

请不要把重点放在示例上,而是示例的预期效果,因为示例是为了展示而进行的简化。因此,允许示例工作但不能扩展为任何其他任意操作的黑客不回答我的 question.a

我认为您正在寻找语句级触发器。不幸的是 mysql.

中没有语句级触发器

检查这些:MySQL Trigger get current query that caused trigger to fire

https://dev.mysql.com/doc/refman/5.7/en/faqs-triggers.html#faq-mysql-have-trigger-levels :

"In MySQL 5.7, all triggers are FOR EACH ROW; that is, the trigger is activated for each row that is inserted, updated, or deleted. MySQL 5.7 does not support triggers using FOR EACH STATEMENT."