study/mysql/触发器.md

44 lines
2.1 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

### 触发器
触发器是一种与表操作有关的数据库对象,当触发器所在的表上出现指定事件时,将调用该对象,即表的操作事件触发表上的触发器的执行。<br>
***触发器的创建*** <br>
```
CREATE TRIGGER 触发器名称 BEFORE|AFTER 触发事件
ON 表名 FOR EACH ROW
BEGIN
触发器程序体
END
-- 触发器名称它和MySQL中其他对象的命名方式
-- {BEFORE|AFTER} 触发器触发的时机
-- {INSERT|UPDATE|DELETE} 触发器事件
-- FOR EACH ROW 子句通知触发器每隔一行执行一次动作,而不是对整个表执行一次。
-- (针对insert和delete语句每一行都触发)
```
***查看触发器*** <br>
`show triggers;` <br>
***删除触发器*** <br>
`drop trigger trigger_name;` <br>
***触发器中new和old的作用*** <br>
1. 针对update操作new表示的是更新后的值old表示的是原来的数据。
2. 针对insert操作new表示插入的值。
3. 针对delete操作old表示的是删除后的值。<br>
***触发器特性*** <br>
触发器可以禁止或者回滚违反引用完整性的更改,从而取消所尝试的数据修改。
### 触发器的作用
1. 允许/限制对表的修改
2. 自动生成派生列,比如自增字段
3. 强制数据一致性
4. 提供审计和日志记录
5. 防止无效的事务处理
6. 启用复杂的业务逻辑
### 触发器类型
1. ***语句触发器***:是在表上或者某些情况下的视图上执行的特定语句或者语句组上的触发器。能够与 INSERT 、 UPDATE 、 DELETE 或者组合上进行关联。但是无论
使用什么样的组合,各个语句触发器都只会针对指定语句激活一次。 比如,无论 update 多少行,也只会调用一次 update 语句触发器。
2. ***行触发器***:是指为受到影响的各个行激活的触发器
3. ***INSTEAD OF 触发器***:instead of 触发器,可以实现 : 不执行导致 trigger 触发的语句,而只执行触发器 .
5. ***用户事件触发器***:用户事件:用户登陆、注销, CREATE / ALTER / DROP / ANALYZE / AUDIT / GRANT / REVOKE / RENAME / TRUNCATE / LOGOFF