MySQL 如何创建和使用MySQL触发器?
要创建一个新触发器,我们需要使用CREATE TRIGGER语句。它的语法如下−
CREATE TRIGGER 触发器名称 触发时间 触发事件
ON 表名
FOR EACH ROW
BEGIN
...
END;
在这里,
- 触发器名称 是触发器的名称,必须放在CREATE TRIGGER语句之后。 触发器名称的命名规则可以是 [触发时间] _ [表名] _ [触发事件]。例如,before_student_update或after_student_insert可以是触发器的名称。
- 触发时间 是触发器的激活时间,它可以是BEFORE或AFTER。定义触发器时必须指定激活时间。如果我们想在对表进行更改之前处理操作,则必须使用BEFORE;如果我们想在对表进行更改后处理操作,则必须使用AFTER。
- 触发事件 可以是INSERT、UPDATE或DELETE。此事件会导致触发器被调用。一个触发器只能被一个事件调用。要定义由多个事件调用的触发器,我们必须为每个事件定义多个触发器。
- 表名 是表的名称。实际上,触发器始终与特定表相关联。没有表,触发器就不存在,因此我们必须在“ON”关键字之后指定表名。
- BEGIN…END 是我们将定义触发器逻辑的代码块。
阅读更多:MySQL 教程
示例
假设我们想在创建如下的Student_age表上应用触发器−
mysql> Create table Student_age(age INT, Name Varchar(35));
Query OK, 0 rows affected (0.80 sec)
现在,如果有人尝试插入年龄<0,则以下触发器将自动插入age = 0。
mysql> DELIMITER //
mysql> Create Trigger before_inser_studentage BEFORE INSERT ON student_age FOR EACH ROW
BEGIN
IF NEW.age < 0 THEN SET NEW.age = 0;
END IF;
END //
Query OK, 0 rows affected (0.30 sec)
现在,为了调用此触发器,我们可以使用以下语句−
mysql> INSERT INTO Student_age(age, Name) values(30, 'Rahul');
Query OK, 1 row affected (0.14 sec)
mysql> INSERT INTO Student_age(age, Name) values(-10, 'Harshit');
Query OK, 1 row affected (0.11 sec)
mysql> Select * from Student_age;
+------+---------+
| age | Name |
+------+---------+
| 30 | Rahul |
| 0 | Harshit |
+------+---------+
2 rows in set (0.00 sec)
上面的结果集表明,在表中插入负值会导致触发器插入0。
上面是将触发器事件设置为INSERT和触发时间设置为BEFORE的示例。