目录
0、前言
存储过程和触发器都是SQL语句和流程控制语句的集合。就本质而言,触发器也是一种存储过程,是一种在基本表被修改时自动执行的内嵌过程,主要通过事件进行触发而被执行。
触发器的主要作用是实现逐渐和外键所不能保证的复杂的参照完整性和数据的一致性,有助于强制引起完整性,以便在添加、更新或删除表中行时保留表之间已经定义的关系。
由于触发器中可以包含复杂的处理逻辑,因此,应该将触发器用来保持低级的数据的完整性,而不是大量的查询结果。
1、触发器是什么
触发器(Trigger)是用户定义在关系表上的一类由事件驱动的特殊过程。
- 触发器保存在数据库服务器中。
- 任何用户对表的增、删、改操作均由服务器自动激活相应的触发器。
- 触发器可以实施更为复杂的检查和操作,具有更精细和更强大的数据控制能力。
- 任何用户对表的增、删、改操作均由服务器自动激活相应的触发器。
2、触发器类型
DML触发器:常用于强制执行业务规则和数据完整性。可用于强制引起(参照)完整性,以便在多个表中添加、更新、或者删除行时,保留这些表之间所定义的关系。
Insert触发器:向表中插入数据时被触发;
Delete触发器:从表中删除数据时被触发;
Update触发器:修改表中数据时被触发。
DDL触发器:DDL触发器是一种特殊的触发器,他在响应定义数据语言(DDL)时触发。DDL触发器也是通过事件激活并执行其中的SQL语句的,DML触发器是响应CREATE、ALTER、DROP、GRANT、DENY、REVOKE等语句激活的
触发时机:
Before触发器
After触发器
3、定义触发器
SQL:
CREATE TRIGGER <触发器名>
ON <表名>
FOR/AFTER/INSTEAD [DELETE,INSERT,UPDATE]
AS
<触发动作体>
GO
MySQL:
DELIMITER ‘x’
CREATE TRIGGER <触发器名>
AFTER/BEFORE [DELETE/INSERT/UPDATE] ON 表名
FOR EACH ROW #这句话在mysql是固定的
BEGIN
<触发动作体>;
END;
‘x’
创建一个触发器,当插入或更新列时,该触发器检查插入的数据是否处于设定的范围内。
4、删除触发器
删除触发器的SQL语法:
DROP TRIGGER <触发器名> ON <表名>;
触发器必须是一个已经创建的触发器,并且只能由具有相应权限的用户删除。