本文存在的意义只是将作者在工作学习中的东西进行记录,文中若有不正确之处还望指出
什么是触发器?
百度词条解释:
触发器(trigger)是SQL server 提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当对一个表进行操作( insert,delete, update)时就会激活它执行。触发器经常用于加强数据的完整性约束和业务规则等。
个人理解:
“触发器本质上讲就是事件监控器,可以定义在数据库系统进行某一个操作的前后触发器。当数据库系统在进行特定的操作时,发现有触发器定义,就去执行触发器定义的功能,从而满足某些特定的需要。
目前可以理解为是为了保证数据完整性和数据一致性而应用的一个功能。我们可以在不同的应用场景中根据不同的事件让数据库自动触发我们已经设置的触发器,从而保证数据的一致性。
触发器的分类
一、DLL 触发器:
1、INSERT 当表中执行INSERT语句时触发
2、UPDATE 当表中执行UPDATE语句时触发
3、DELETE 当表中执行DELETE语句时触发
二、触发方式:
1、BEFORE 前置触发:在事件执行前触发
2、AFTER 后置触发:在事件执行后触发
触发器的格式
创建触发器
DELIMITER $$
CREATE TRIGGER 触发器名称
AFTER || AFTER
INSERT || UPDATE || DELETE
ON 表名(在哪张表上建立触发器)
FOR EACH ROW
BEGIN
触发事件
END;$$
DELIMITER ;
查看触发器
// 查看本数据库中的所有触发器
SHOW TRIGGERS;// 查看mysql中的所有触发器,范围更大,information_schema库中的TRIGGERS表包含了所有的触发器
SELECT * FROM INFORMATION_SCHEMA.TRIGGERS
;
删除触发器
DROP TRIGGER 触发器名称;
例子
创建一个zs_people表,并加入一条数据创建一个zs_people_log表,用于验证触发器创建一个insert后置触发器,当zs_people表中有insert执行后,就会自动将zs_people新增的数据insert到zs_people_log表中,
此处的delimiter关键字不可省略zs_people表添加一条新数据显示zs_people_log表中已经存在刚刚新增的数据