SQL 触发器
上一篇 /
下一篇 2008-11-18 09:41:34
/ 个人分类:SQL
SQL触发器有3种: insert触发器.update触发器.delete触发器insert触发器:用insert语句向表中插入数据时都会执行的触发器.当触发insert触发器时,新的数据行就会被插入到触发器表和inserted表中。inserted表是一个逻辑表,它包含了已经插入的数据行的一个副本。
例:
createtrigger tri_insert
onstudent
forinsert
as
declare@student_id char(10)
select@student_id=s.student_idfrom
student s inner joininsertedi
on s.student_id=i.student_id
if @student_id='000000001'
begin
raiserror('can't insert number 1',16,8)
rollback tran
end
go
delete触发器:当触发delete触发器后,从受影响的表中删除的行将被放置到一个特殊的deleted表中。deleted表是一个逻辑表,它保留已被删除数据行的一个副本。
- 当某行被添加到deleted表中时,它就不再存在于数据库表中;因此,deleted表和数据库表没有相同的行。
- 创建deleted表时,空间是从内存中分配的。deleted表总是被存储在高速缓存中。
- 为DELETE动作定义的触发器并不执行TRUNCATE TABLE语句,原因在于日志不记录TRUNCATE TABLE语句。
例: create trigger tri_delete
on student
for delete
as
declare @student_id varchar(10)
select @student_id=student_id from deleted
if @student_id='admin'
begin
raiserror('错误',16,8)
rollback tran
end
update触发器:可将update语句看成两步操作:即捕获数据前像(before image)的delete语句,和捕获数据后像(after image)的insert语句。当在定义有触发器的表上执行update语句时,原始行(前像)被移入到deleted表,更新行(后像)被移入到inserted表。
例:
create trigger tri_update
on student
for update
as
if update(student_id)
begin
raiserror('学号不能修改!',16,8)
rollback tran
end
go
相关阅读:
- 教你如何在SQL Server数据库中加密数据 (fishy, 2008-10-16)
- SQL Server与Oracle实施成本上的差异 (fishy, 2008-10-17)
- 完全优化MySQL数据库性能的八大巧方法 (fengyun32, 2008-10-18)
- SQL技巧 (王爬爬, 2008-10-21)
- SQL端口问题及其常见问题 (超越自我, 2008-10-21)
- 微软SQL Server 2008数据库中的新数据类型 (fishy, 2008-10-22)
- SQL注入攻击的网络分析及防御方法 (fishy, 2008-10-28)
- SQL Select语句的执行顺序 (biscuit, 2008-11-09)
- SQL常用的Function (biscuit, 2008-11-09)
- SQL Server索引简单总结 (biscuit, 2008-11-10)
收藏
举报
TAG:
SQL