触发器

1.触发器的基本介绍:其创建的样式类似于存储函数和存储过程,但是与存储函数和存储过程不同,触发器的调用触发是经过预先规定的,而不在是通过手动输入代码进行调用。

    主要功能:一般用于一个表中的数据改变时,与之相关联的表的更新(因为表的相关性,相关表的数据在原表改变后也需要进行更新同一,如果全部手动操作一遍则过于繁琐,因此引入了触发器的概念)

 

触发器的基本语句形式:

1 CREATE TRIGGER 触发器名称
2 BEFORE/AFTER(操作执行前还是执行后触发) INSERT/UPDATE/DELETE(针对哪种操作会触发) ON 表名(对哪个表起作用)
3 FOR EACH ROW #每执行一行触发一次
4 触发器执行的语句块;

实例:

1 DELIMITER //
2 CREATE TRIGGER before_insert_test_tri
3 BEFORE INSERT ON test_trigger
4 FOR EACH ROW
5 BEGIN
6     INSERT INTO test_trigger_log(t_log)
7     VALUES ("before_insert");
8 END //
9 DELIMITER;

 

2.有关触发器的实际应用:

(1).

 1 #实例问题解决1
 2 #向test_trigger数据表插入数据后,向test_trigger_log插入after_insert的信息日志
 3 DELIMITER //
 4 CREATE TRIGGER after_insert 
 5 AFTER INSERT ON test_trigger
 6 FOR EACH ROW #此行记得不要遗忘!
 7 BEGIN
 8     INSERT INTO test_trigger_log(t_log)
 9     VALUES("after insert");
10 END //
11 DELIMITER;

 

(2).

 1 #实例问题解决2
 2 #基于员工表的INSERT事件,在INSERT之前检查新员工薪资是否大于他领导的薪资,如果大于则认为是非法操作
 3 #则报sqlstate_value为'HY000'的错误,使得添加失败
 4 DELIMITER //
 5 CREATE TRIGGER salary_check_trigger
 6 BEFORE INSERT ON employees
 7 FOR EACH ROW
 8 BEGIN
 9     DECLARE mgr_sal DOUBLE;
10     SELECT salary INTO mgr_sal FROM employees 
11     WHERE employee_id = new.manager_id;#new就表示所目前所插入的这个元组
12     
13     IF (new.salary > mgr_sal) 
14         THEN SIGNAL SQLSTATE 'HY000' SET MESSAGE_TEXT = "薪资有误";#该行即输出错误信息
15     END IF; 
16     
17 END //
18 DELIMITER;

 

(3).

 1 #3. 创建触发器emps_del_trigger,每当向emps表中删除一条记录时,同步将删除的这条记录添加到emps_back1表中
 2 DELIMITER //
 3 CREATE TRIGGER emps_del_trigger
 4 AFTER DELETE ON emps
 5 FOR EACH ROW
 6 BEGIN
 7     INSERT INTO emps_back1(employee_id,last_name,salary)
 8     VALUES (old.employee_id,old.last_name,old.salary);#old表示所目前所插入的这个元组
 9 END //
10 DELIMITER;

 

2.触发器的删除 

DROP TRIGGER 触发器名;

实例:

1 DROP TRIGGER emps_del_trigger;

 

posted @ 2022-03-31 19:25  jue1e0  阅读(96)  评论(0)    收藏  举报