mysql - 如何识别 MySQL 触发器操作
问题描述
在 Oracle 中,当编写一个处理 INSERT、UPDATE 或 DELETE 操作的唯一触发器时,何时可以使用这种技术检测正在执行的操作,称为“条件谓词”
create trigger sample_trigger
before insert or update
on sample_table
for each row
begin
case
when inserting then
--do something
when updating then
--do something
end case;
end;
MySQL 5.6 是否提供任何允许我这样做的技术?我不想编写三个不同的触发器来区分正在执行的操作。谢谢!
解决方案
不可以。在 MySQL 中(甚至在 8.0 中)只能为一种类型的操作调用触发器INSERT
,UPDATE
或DELETE
。从手册中,语法为CREATE TRIGGER
:
CREATE [DEFINER = { user | CURRENT_USER }] TRIGGER trigger_name trigger_time trigger_event ...
并且trigger_event
只能是INSERT
,UPDATE
或之一DELETE
:
trigger_event: { INSERT | UPDATE | DELETE }
因此,鉴于没有为不同操作调用触发器的范围,因此不需要您描述的条件谓词。
您可以做的是将您的触发器代码放入存储过程中,然后使用指定操作类型的参数调用它,例如INSERT
您可能使用的触发器
CREATE TRIGGER db_insert
BEFORE INSERT ON db
FOR EACH ROW
BEGIN
CALL db_trigger_proc('INSERT');
END
推荐阅读
- spring-boot - Spring Boot 和 Zuul 出现 404 错误
- angular - 在Angular 6中获取没有@ViewChild装饰器的视图子元素
- functional-programming - 功能惯用的 FFT
- java - 在 Java 中的 Linux 服务器中选择日语时,下载 CSV 文件头会变得垃圾
- jquery - 打开时更改表 tr(th td) 背景颜色
- javascript - 谷歌地图自动完成样式
- jquery - 自定义 jquery 插件在页面中不起作用
- javascript - 带有 v-bind 的 Nativescript Vue 切换按钮
- android - 需要支持分屏支持React原生Android
- sql-server - 在 Microsoft Access 中存储运算符,例如 >= OR <=