先说一下sql中触发器的概念:触发器是一种特殊的存储过程,被定义为在对特定表或视图发出UPDATE 、 INSERT 、DELETE? 语句时自动执行
附:所谓事务是用户定义的一个数据库操作序列,这些操作要么全做要么全不做,是一个不可分割的工作单位。例如,在关系数据库中,一个事务可以是一条SQL语句、一组SQL语句或整个程序。 简单举个例子就是你要同时修改数据库中两个不同表的时候,如果它们不是一个事务的话,当第一个表修改完,可是第二表改修出现了异常而没能修改的情况下,就只有第二个表回到未修改之前的状态,而第一个表已经被修改完毕。 而当你把它们设定为一个事务的时候,当第一个表修改完,可是第二表改修出现了异常而没能修改的情况下,第一个表和第二个表都要回到未修改的状态!这就是所谓的事务回滚。
INSERT 触发器的工作过程
inserted表
INSERT触发器使用实例:现在数据库中有2个表orders和orderdetail 要实现orders表中插入一条记录insert into(orderid,number) values(4,1004) 后 相应的在orderdetails表中系统自动插入一条记录(orderid,productid) values(4,104),其中orderid是刚刚插入orders表中的orderid值 先假设productid为一个 常量值104 实现此功能需要在orders表上加一个触发器,触发器代码为: create trigger tr_insert_orders on? orders DELETE触发器使用实例:现在数据库中有2个表orders和orderdetails 要实现orderdetails 表中删除一条记录后 相应的在order表中系统自动删除一条与刚才orderdetails表中相同orderid的记录 实现此功能需要在orderdetails表上加一个触发器,触发器代码为: CREATE TRIGGER tr_delete_orderdetails ON [dbo].[orderdetails] UPDATE触发器使用实例:现在数据库中有2个表orders和orderdetails 要实现orders表中更新一条记录后? 意即orderid由原来的4更改为5 系统自动的将orderdetails表中的orderid也更新为5 其实数据库表中对更新的操作执行的流程是先delete然后在insert 所以在orders表中更新orderid的时候原来的orderid的值 存放在了deleted临时表中 更新后的orderid的值 存放在了inserted临时表中 实现此功能需要在orders表上加一个触发器,触发器代码为: CREATE TRIGGER TR_UPDATE_ORDERS ON [dbo].[ORDERS] SELECT @OLDID =ORDERID FROM DELETED SELECT @NEWID =ORDERID FROM INSERTED orders表结构 orderdetails表结构 |
sql触发器入门学习
最新推荐文章于 2021-04-06 11:22:07 发布