概念
触发器是由事件来触发某个操作,这些事件包括INSERT、UPDATE 、DELETE 事件。所谓事件就是指用户的动作或者触发某项行为。如果定义了触发程序,当数据库执行这些语句时候,就相当于事件发生了,就会自动激发触发器执行相应的操作。
当对数据表中的数据执行插入、更新和删除操作,需要自动执行一-些数据库逻辑时,可以使用触发器来实现。
创建触发器
CREATE TRIGGER 触发器名称
{BEFORE|AFTER} {INSERT|UPDATE|DELETE} ON 表名
FOR EACH ROW
触发器执行的语句块(可以是单个SQL语句,也可以是BEGIN END组成的复杂语句块)
例
employee表
employee_id
first_name
last_name
phone_number
job_id
salary
commission_pct
manager_id
department_id
CREATE TRIGGER check_salary BEFORE INSERT ON employee FOR EACH ROW
BEGIN
DECLARE
mgr_salary DOUBLE;
SELECT
salary INTO mgr_salary
FROM
employee
WHERE
employee_id = NEW.manager_id;#NEW表示新添加到表中的一条记录
IF
NEW.salary > mgr_salary THEN
SIGNAL SQLSTATE 'HYOOO'
SET MESSAGE_TEXT = '薪资高于领导薪资错误';
END IF;
END
查看所有触发器
SHOW TRIGGERS; //查看当前数据库的所有触发器的定义
SHOW CREATE TRIGGERS 触发器名称; //查看当前数据库中某个触发器的定义
SELECT * from information_schema.`TRIGGERS`; //从系统库的触发器表中产看
删除触发器
DROP TRIGGER 触发器名称;
注意
如果在子表中定义了外键约束,并且外键指定了ON UPDATE/DELETE CASCODE/SET NULL子句,此时修改父表被引用的键值,也会引起子表的修改,但基于子表的UPDATE和DELETE语句定义的触发器并不会被激活。