SQL触发器课堂笔记

--创建触发器
--触发器 保证数据完整性,与表事件相关的特殊的存储过程,由事件触发
--比如当对一个表进行操作时(alter,delete,update)

DELETE Student
WHERE Sno='1201011102'

SELECT *
FROM Student
WHERE Sno='1201011102'

--插入一条新记录
INSERT INTO Student
(Sno,Sname,Ssex,EntranceTime,Classno)
VALUES 
('11099','字符串','男','2000-01-01','11010111')
--查询插入的新记录
SELECT *
FROM Student
WHERE Sno='11099'
--如果要真的删除,需要禁用表里面的delete_student触发器
DELETE Student
WHERE Sno='11099'


ALTER TRIGGER [dbo].[update_sname]
on [dbo].[Student]
FOR UPDATE  --INSTEAD OF UPDATE
AS
	IF UPDATE(Sname)
	BEGIN 
		PRINT '不能修改学生的姓名'
		ROLLBACK TRANSACTION
	END 
	ELSE IF UPDATE(Ssex)
	BEGIN 
		PRINT '不能修改学生的性别'
		ROLLBACK TRANSACTION --撤销操作
	END 


--测试代码,检查触发器功能是否正常
UPDATE Student
SET Sname ='zfc'
WHERE Sno='1101011101'

UPDATE Student
SET Ssex ='m'
WHERE Sno='1101011101'

SELECT *
FROM Student
WHERE Sno='1101011101'

--创建一个触发器,针对于teacher表,如果有人要修改教师的姓名,就输出不能修改教师姓名

CREATE TRIGGER T_UPDATENAME
ON Teacher --对Teacher表起作用
FOR UPDATE --触发条件,insert,delete
AS
	IF UPDATE(Tname)
	BEGIN 
		PRINT	'不能修改教师姓名'
		ROLLBACK TRAN	--事物回滚
	END

--测试代码,验证触发器是否有效
UPDATE Teacher
SET Tname='字符串'
WHERE Tno='0101'

SELECT *
FROM Teacher
WHERE Tno='0101'
--
ALTER TRIGGER T_INSERT
ON Teacher
FOR INSERT 
AS
--两张特殊的表,INSERTED ,DELETED(隐藏),记录刚刚插入或者删除的记录
DECLARE @Tno char(4) --定义的局部变量用来保存从系统表中查出的教师的工号
SELECT @Tno=Tno
FROM INSERTED
PRINT @Tno

	IF LEFT(@Tno,2)!='11'
		PRINT '不能插入该记录'
		ROLLBACK TRAN

--测试触发器语句
INSERT INTO Teacher
(Tno,Tname,Ttitle)
VALUES 
('0997','ZIFUCHUAN','教授')
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值