场景
触发器
触发器(Trigger)是一个特殊的存储过程,不同的是执行存储过程要使用 CALL 语句来调用,而触发器的执行不需要使用 CALL 语旬来调用,
也不需要手工启动,只要一个预定义的事件发生就会被MySQL自动调用。
例如,当对一个数据表进行插入、更新或删除等操作时可以激活触发器并执行触发器。
触发程序经常用于加强数据的完整性约束和业务规则等。
触发程序类似于约束,但比约束更灵活,具有更精细、更强大的数据控制能力。
创建触发器
语法格式
CREATE TRIGGER trigger_name trigger_time trigger_event
ON tbl_name FOR EACH ROW trigger_stmt
trigger_name:触发器名称
trigger_time:标识触发时机,可以指定为before或after
trigger_event:标识触发事件,包括INSERT、UPDATE、DELETE
tbl_name:标识建立触发器的表名
trigger_stmt:触发器程序体。
触发器程序可以使用BEGIN和END作为开始和结束,中间包含多条语句
创建一个名为in_newstu的触发器,触发的条件是向数据表test_student中插入数据之前对新插入的id进行求和计算。
CREATE TRIGGER in_newstu BEFORE INSERT ON test_student
FOR EACH ROW SET @ss= NEW.sid+1;
设置变量的初始值为0
SET @ss= 0;
插入数据,启动触发器
INSERT INTO test_student VALUES (6, '张三', NULL, 13, 101);
查询变量
SELECT @ss;
创建一个触发器,当插入的sid等于7时将姓名设为"霸道"
CREATE TRIGGER name_student
BEFORE INSERT
ON test_student
FOR EACH ROW
BEGIN
IF new.sid =7 THEN
SET new.sname ='霸道';
END IF;
END
插入数据并验证
INSERT INTO test_student VALUES (7, '张1', NULL, 13, 101);
SELECT * FROM test_student WHERE sid = 7;
查看触发器
SHOW TRIGGERS;
还可以通过查看系统表查看触发器
SELECT * FROM information_schema.TRIGGERS WHERE TRIGGER_NAME = 'name_student';
删除触发器
DROP TRIGGER name_student;