如何创建和使用 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。


相关文章