SQL——触发器

触发器是一种特殊类型的存储过程,当指定表中的数据发生变化时触发器自动生效。它与表紧密相连,可以看做是表定义的一部分。触发器不能通过名称直接被调用(与存储过程的区别),更不允许设置参数。
DML触发器的创建:
①在student表上创建触发器t1,在用户插入、修改和删除记录时,都会自动显示表中的内容。

	create trigger t1
	on student
	after insert, update, delete
	as
	select *
	from student; 

②建立一个触发器t2,当向student表中插入数据时,如果姓名不重复则插入,如果出现姓名重复的情况, 则提示错误(raiserror(‘姓名重复,不能插入’,16,1))并回滚该事务(即取消插入的行)。

 create trigger t2
 on student 
 after insert
 as 
	begin
	declare @str char(10)
	declare @ssno int
	select @str = sname from inserted 
	select @ssno = count(*)
	from student 
	where sname = @str
	if(@ssno >= 2)
		begin
		  raiserror ('姓名重复,无法插入',16, 1)   -- 提示错误消息
		  rollback                                                 -- 回滚
		end
	end

③一个修改触发器t4,该触发器防止用户修改表student的学号。

 create trigger t4
 on student 
 for update
 as
	begin
		if(update(sno))
		begin
			raiserror ('不能修改学号',16, 1)
			rollback
		end
	end
 

④创建触发器t6,当删除student表中的某个学生记录时,应该也同时删除score表中该生的选课记录。

	create trigger t6
	on student
	after delete
	as
		declare @sno char(5)
		select @sno = sno
		from deleted
		delete 
		from score
		where sno = @sno		
	delete 
	from student
	where sno = '122';
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值