MySQL - SHOW CREATE TRIGGER 语句
MySQL SHOW CREATE TRIGGER 语句
MySQL 中的触发器是类似于过程的存储程序。这些触发器可以在与事件关联的表、模式、视图和数据库上创建,并且每当事件发生时都会调用相应的触发器。
实际上,触发器是为响应以下任何事件而编写的 -
- 数据库操作 (DML) 语句(DELETE、INSERT 或 UPDATE)
- 数据库定义 (DDL) 语句(CREATE、ALTER 或 DROP)。
- 数据库操作(SERVERERROR、LOGON、LOGOFF、STARTUP 或 SHUTDOWN)。
SHOW CREATE TRIGGER 语句显示用于创建指定触发器的 CREATE 语句。
语法
以下是 SHOW CREATE TRIGGER 语句的语法。
SHOW CREATE TRIGGER name
其中,name 是需要创建语句的触发器的名称。
示例
假设我们创建了一个名为 student 的表,如下所示 -
Create table Student( Name Varchar(35), age INT, Score INT );
让我们创建一个触发器,如果您输入小于 0 的分数,它将把分数值设置为 0。
DELIMITER // Create Trigger sample_trigger BEFORE INSERT ON student FOR EACH ROW BEGIN IF NEW.score < 0 THEN SET NEW.score = 0; END IF; END // DELIMITER ;
以下查询显示用于创建上述触发器的查询。如果您尝试在学生表中插入记录,并且使用小于 0 的值作为年龄,则年龄将自动设置为 0。
INSERT INTO student values ('Jeevan', 22, 8), ('Raghav', 26, -3), ('Khaleel', 21, -9), ('Deva', 30, 9);
如果您验证学生表的内容,您会发现在分数列下没有插入负值 -
SELECT * from student;
输出
以下是上述查询的输出 -
Name | age | Score |
---|---|---|
Jeevan | 12 | 8 |
Raghav | 26 | 0 |
Khaleel | 21 | 0 |
Deva | 30 | 9 |
假设我们已经使用 after 子句创建了一个触发器,如下所示 -
CREATE TRIGGER testTrigger AFTER UPDATE ON Student FOR EACH ROW INSERT INTO Student SET action = 'update', Name = OLD.Name, age = OLD.age, score = OLD.score;
以下查询显示用于创建名为 testTrigger 的触发器的 CREATE 语句 -
SHOW CREATE TRIGGER testTrigger\G;
输出
上述查询生成如下所示的输出 -
************ 1. row ************ Trigger: testTrigger sql_mode: ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES, NO_ZERO_IN_DATE,NO_ZERO_DATE, ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION SQL Original Statement: CREATE DEFINER=`root`@`localhost` TRIGGER `testTrigger` AFTER UPDATE ON `student` FOR EACH ROW INSERT INTO Student SET action = 'update', Name = OLD.Name, age = OLD.age, score = OLD.score character_set_client: cp850 collation_connection: cp850_general_ci Database Collation: utf8mb4_0900_ai_ci Created: 2023-12-12 16:40:02.96