触发器
- 概念:触发器是一个在修改指定表中的数据时执行的存储过程。经常通过创建触发器来强制实现不同表中的逻辑相关数据的引用完整性或一致性。由于用户不能绕过触发器,所以可以用它来强制实施复杂的业务规则,以此确保数据的完整性。触发器定义在某个创建的表上也可以定义在一个数据库上。
- 触发器和存储过程的区别:
(1)触发器主要时通过事件进行触发而被执行的
(2) 存储过程可以通过存储过程名字而被直接调用
为什么要使用触发器
- 优点:
(1)触发器自动执行,它们在表的数据作了任何修改之后立即激活
(2)触发器可以通过数据库中的相关表进行层叠更改。这比直接把代码卸载前台的做法更安全合理
(3)触发器可以强制限制,这些限制比用CHECK约束所定义的更复杂。与CHECK的约束不同的是,触发器可以引用其他表中的列。 - 功能:维护数据的安全性
触发器的种类
- DDL触发器:数据定义语言 (DDL)触发器,针对数据库 ,在创建一个表或者修改,删除时会触发DDL这样一个触发器,这个触发器可以防止对数据库架构进行某些更改,希望数据库中发生某种情况以响应数据库架构中的更改,要记录数据架构中的更改或者事件。 DDL 触发器激发存储过程以响应各种 DDL 语句,这些语句主要以CREATE、ALTER 和 DROP 开头。 DDL 触发器可用于管理任务,例如审核和控制数据库操作。
- DML触发器:数据操作语言,当INSERT、UPDATE 或 DELETE 语句修改指定表或视图中的数据时,可以使用 DML 触发器。它包含三种触发器分别是:
(1)INSERT触发器
(2)UPDATE触发器
(3)DELETE触发器 - 通常说的触发器就是DML触发器。
创建触发器的步骤
创建触发器首先需要create trigger权限
在创建语句上大致可以分为4步:
1、定义触发器
2、触发条件(区分触发器的类型)
3、声明部分
4、主体部分
创建触发器
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:触发器程序体,可以是一句SQL语句,或者用BEGIN 和 END 包含的多条语句。
- 由此可见,可以建立6种触发器,即:BEFORE INSERT、BEFORE UPDATE、BEFORE DELETE、AFTER INSERT、AFTER UPDATE、AFTER DELETE。
- 另外有一个限制是不能同时在一个表上建立2个相同类型的触发器,因此在一个表上最多建立6个触发器。
查看触发器
SELECT * FROM information_schema.`TRIGGERS`;
//或者
SHOW TRIGGERS [FROM schema_name];
- 其中,schema_name 即 Schema 的名称,在 MySQL 中 Schema 和 Database 是一样的,也就是说,可以指定数据库名,这样就不必先“USE database_name;”了。
删除触发器
drop trigger lease_trigger;