我们如何创建和使用MySQL触发器?
为了创建一个新的触发器,我们需要使用CREATETRIGGER语句。它的语法如下-
CREATE TRIGGER trigger_name trigger_time trigger_event ON table_name FOR EACH ROW BEGIN ... END;
这里,
Trigger_name是触发器的名称,必须将其放置在CREATETRIGGER语句之后。trigger_name的命名约定可以类似于[triggertime]_[tablename]_[triggerevent]。例如,before_student_update或after_student_insert可以是触发器的名称。
Trigger_time是触发激活的时间,可以是BEFORE或AFTER。我们必须在定义触发器时指定激活时间。如果要在对表进行更改之前处理操作,则必须使用BEFORE;如果要在对表进行更改之后处理操作,则必须使用AFTER。
Trigger_event可以是INSERT,UPDATE或DELETE。此事件导致触发触发器。触发器只能由一个事件调用。要定义由多个事件调用的触发器,我们必须定义多个触发器,每个事件一个。
Table_name是表的名称。实际上,触发器始终与特定表相关联。没有表,触发器将不存在,因此我们必须在“ON”关键字之后指定表名。
BEGIN…END是我们将在其中定义触发器逻辑的块。
示例
假设我们要在创建如下的Student_age表上应用触发器-
mysql> Create table Student_age(age INT, Name Varchar(35));
现在,如果有人尝试插入年龄<0,则以下触发器将自动插入年龄=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 //
现在,要调用此触发器,我们可以使用以下语句-
mysql> INSERT INTO Student_age(age, Name) values(30, 'Rahul'); mysql> INSERT INTO Student_age(age, Name) values(-10, 'Harshit'); 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。