您的位置:首页 > 数据库

数据库 字段利用数据库触发器填写 相关知识点

2009-05-15 12:53 260 查看
在触发器中,有两个特殊的逻辑表:
inserted 和 deleted

这两个表是系统自动生成的.
inserted中记录的是新增或修改后的内容
deleted中记录的是删除或修改前的内容

例如有如下表:
a
id,name
1 aa
2 bb

1.新增
执行:insert into a(id,name) values(3,'cc')
这时,在触发器中
inserted表的内容就是:
3 cc
deleted表内容为空

2.修改
执行:update a set name=name+'1' where id<3
这时,在触发器中
inserted表的内容就是:
1 aa1
2 bb1
deleted表内容为空
1 aa
2 bb

3.删除
执行:delete from a where id=2
这时,在触发器中
inserted表的内容就是空
deleted表内容为空
2 bb

所以你的触发器可以这样写:
方法1
create trigger aa on 你的表
for insert,delete,update
if exists(select * from inserted)
if exists(select * from deleted)
....... --记录操作为修改的处理语句
else
.......... --记录操作为新增的处理语句
else
......... --记录操作为删除的处理语句

方法2.分开写
create trigger aa on 你的表
for insert
as
........ --记录操作为新增的处理语句

create trigger aa on 你的表
for update
as
........ --记录操作为修改的处理语句

create trigger aa on 你的表
for delete
as
........ --记录操作为删除的处理语句

事例:

触发器实现关键字自动+1要注意:
1、触发器是在插入后运行的,之前如果主键冲突,就到不了触发器。
2、自动+1的规则,多人操作的时候不能保证生成的关键字不重复,当出现关键字重复时如何处理?
3、INSTEAD OF INSERT 触发器可以避免问题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: