数据库---触发器

继续接上一讲,今天梳理一下数据库中的触发器的相关知识点。

一、触发器的概念

1.1触发器是什么?

触发器是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当对一个表进行操作( insert,delete, update)时就会激活它执行。关键词:自动触发。

1.2为什么要使用触发器?

触发器经常用于加强数据的完整性约束和业务规则等。

1.3 触发器类型

后置触发器 after
使用after定义的触发器为后触发型的触发器,只有在语句(引发触发器执行的)指定的操作都已成功执行,后续才执行触发器。该种触发器涉及的场景较多,较为常用。
ps:不能在视图上定义AFTER触发器
前置触发器 before
使用before 选项定义的触发器为前触发型触发器,在这种模式的触发器中,先指定执行触发器,而不是先执行语句。
举个例子:用前触发器实现:新插入职工数据时,其工资必须在相应工作的最低工资到最高工资之间。

二、触发器的书写格式

-- 触发器 TRIGGER   代码开发过程中,用的很少;数据体量较大时,尽量少用
-- 触发器的书写格式如下:
create trigger 触发器名称 after/before  insert/update/delete  on 表名 
begin
	-- 触发器业务代码
end

注意事项
①触发器名称在数据库中,是唯一的。
②for 作用 等同于 after。
③在一个表上,可以建立多个名称不同、类型各异的触发器、每个触发器可由3个操作来引发。

三、触发器的使用

3.1创建触发器

 最后点击"保存"即可生效

3.2查看触发器

刚刚创建好的触发器,如何查看呢?

-- 查看触发器
show TRIGGERS

3.3修改触发器

-- 修改触发器:alter trigger 触发器名
ALTER trigger tri_age

3.4删除触发器

-- 删除触发器:drop trigeer 触发器名
DROP trigger tri_age

四、其他问题答疑

①前置触发器与后置触发器的区别?
前置触发器:before触发器执行失败,sql也会执行失败;
后置触发器:sql执行失败时,after触发器不会执行,sql会回滚;
②触发器与存储过程的区别?
触发器:是特殊的存储过程,是自动触发
存储过程:由用户、程序、或者触发器 显式调用
③行级触发器与语句级触发器的区别?
行级触发器:for each row (sql影响1行就触发1次),需要对每一行数据做处理,使用行级触发器。
语句级触发器:for each statement (默认,1条sql触发1次),语句执行完成后,做该语句的业务处理,用语句级别触发器。
特别注意
mysql不支持语句触发器,所以必须写for each row。
oracle触发器中分行级触发器和语句级触发器,可不写for each row,无论影响多少行都只执行一次。
④可以在视图中创建after触发器吗?
不能

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章