如何创建和使用 MySQL 触发器?
mysqlmysqli database
要创建新触发器,我们需要使用 CREATE TRIGGER 语句。其语法如下 −
CREATE TRIGGER trigger_name trigger_time trigger_event ON table_name FOR EACH ROW BEGIN ... END;
此处,
- Trigger_name 是触发器的名称,必须放在 CREATE TRIGGER 语句之后。trigger_name 的命名约定可以是 [触发时间]_[表名称]_[触发事件]。例如,before_student_update 或 after_student_insert 可以是触发器的名称。
- Trigger_time 是触发器激活的时间,可以是 BEFORE 或 AFTER。定义触发器时必须指定激活时间。如果我们想在对表进行更改之前处理操作,则必须使用 BEFORE;如果我们想在对表进行更改之后处理操作,则必须使用 AFTER。
- Trigger_event 可以是 INSERT、UPDATE 或 DELETE。此事件会导致触发器被调用。一个触发器只能由一个事件调用。要定义由多个事件调用的触发器,我们必须定义多个触发器,每个事件一个。
- Table_name 是表的名称。实际上,触发器始终与特定表相关联。没有表,触发器就不存在,因此我们必须在‘ON’关键字后指定表名。
- BEGIN…hellip;END 是我们将在其中定义触发器逻辑的块。
示例
假设我们想在 Student_age 表上应用触发器,该表创建如下 −
mysql> Create table Student_age(age INT, Name Varchar(35)); Query OK, 0 rows affected (0.80 sec)
现在,如果有人尝试插入 age < 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。
以上是触发器的示例,其中 trigger_event 为 INSERT,trigger_time 为 BEFORE。