sql触发器(insert,update,delete)
程序员文章站
2022-04-05 16:54:10
...
--insert 触发器
create trigger tri_insert
on student --将要进行更改的表名
for insert --给表插入一条数据的时候触发
as
declare @student_id char(10) --定义一个变量
SELECT @student_id=s.student_id from --把查询出的指定字段的值赋值给变量
student s inner join inserted i
on s.student_id=i.student_id
if @student_id='0000000001'
begin
raiserror('不能插入1的学号!',16,8)
rollback tran
end
go
--update触发器
create trigger tri_update
on student --将要进行更改的表名
for update --给表修改一条数据的时候触发
as
if update(student_id)
begin
raiserror('学号不能修改!',16,8)
rollback tran
end
go
create trigger tri_insert
on student --将要进行更改的表名
for insert --给表插入一条数据的时候触发
as
declare @student_id char(10) --定义一个变量
SELECT @student_id=s.student_id from --把查询出的指定字段的值赋值给变量
student s inner join inserted i
on s.student_id=i.student_id
if @student_id='0000000001'
begin
raiserror('不能插入1的学号!',16,8)
rollback tran
end
go
--update触发器
create trigger tri_update
on student --将要进行更改的表名
for update --给表修改一条数据的时候触发
as
if update(student_id)
begin
raiserror('学号不能修改!',16,8)
rollback tran
end
go
--delete触发器
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
解释:在删除(delete)数据的时候,可以假定数据库将要删除的数据放到一个deleted临时表中,我们可以向读取普通的表一样,select 字段 from deleted
而insert的时候道理一样,只不过是把要插入的数据放在inserted表中。
更新操作可以认为是执行了两个操作,先把那一行记录delete掉,然后再insert,这样update操作实际上就对deleted表和inserted表的操作,所以不会有updated表了,有的时候两个表是主外键关系,想删除主表数据的同时把子表相关的数据也删除,这个时候如果用触发器就没有效果了,因为这个触发器是在你删除表后才触发的,这个时候直接终止,提示“有主外键关系,不能删除等”,所有这样的删除触发器是没有效果的
推荐阅读
-
MySQL触发器 Update触发Insert失败
-
sql update 触发器 可获得被update的行的信息
-
SQL Server 触发器 表的特定字段更新时,触发Update触发器
-
ORACLE SQL-UPDATE、DELETE、INSERT优化和使用技巧分享
-
SQL Server 触发器 表的特定字段更新时,触发Update触发器
-
SQL Server中的XML数据进行insert、update、delete操作实现代码
-
在Sql Server触发器中判断操作是Insert还是Update还是Delete
-
SQLServer 2008中SQL增强之三 Merge(在一条语句中使用Insert,Update,Delete)
-
ORACLE SQL-UPDATE、DELETE、INSERT优化和使用技巧分享
-
轻量ORM-SqlRepoEx (四)INSERT、UPDATE、DELETE 语句