这个文章的起源是:金蝶k3wise采购申请单审核时需要自动校验库存,并且生成mto调整单;
直接导致:一个从未写过触发器的门外汉,得到了一点提高;
这篇文章适合像我这样只会在数据库里面进行增删改查,但是还想在数据库中更深入一下的童鞋,通过学习可以初步掌握触发器和存储过程的使用。
文中的示例都是建立在实际项目上的,可能不太适合练习。如果有合适的时间,并且还有一些阅读量的话,我会考虑把案例做成标准的数据。
如果你不慎看到这篇文章,但是对数据库还不熟悉,那么你可以先学习一下基本的语法:SQL语法学习 - 不用真的记不住
一、触发器的一些基础
1.1 触发器的概念
当在`表`中`插入、更新、删除记录`时,`触发`一个或一系列的SQL语句
1.2 触发器类型
- 1.After触发器
当数据表执行插入、更新、删除操作之后,After触发器才被触发。After触发器只能用于数据表,不可用于视图。
分为:
- after insert触发器
- after update触发器
- after delete触发器
- for insert触发器
- for update触发器
- for delete触发器
- 2.Instead Of 触发器
当数据表执行插入、更新、删除操作,Instead Of触发器并不执行插入、更新、删除操作,而是替换成执行触发器本身的T-SQL逻辑。
分为:
- instead of insert触发器
- instead of update触发器
- instead of delete触发器
Instead Of触发器也可用于视图,用来扩展是多表连接的视图设计可以进行更新操作。视图设计是多表连接,是无法更新的。这时候,可以用Instead Of触发器,把更新操作替换为向每个基本表进行更新。
1.3 触发器的2个中间表
触发器触发的时候有两个中间表:插入表(instered表)和删除表(deleted表)。这两张表的字段,和触发器应用主表的字段相同。中间表存储的数据是执行插入、更新、删除操作的数据,当触发器执行完成后,这两张表就会被删除。Inserted表的数据是待插入的数据,或是触发器修改后的数据。deleted表的数据是插入前的原始数据。如果是删除操作的触发器,deleted表是表示删除的数据。

1.4 触发器的语法结构
CREATE TRIGGER trigger_nameON {Table_name|View_name}{FOR|AFTER|INSTEAD OF} [INSERT,UPDATE,DELETE]AS声明部分BEGIN执行部分END
1. `FOR`和`AFTER`意义一样; 它们不能作用于视图
2. 修改触发器把`CREATE`改成`ALTER`
3. 触发器命名规则: `tr_表名_说明`