实验9 SQL Server 的触发器
一、实验目的
1.了解触发器的触发过程和类型
2.通过执行SQL脚本,掌握创建触发器并测试触发器
3.掌握通过使用触发器维护数据完整性的方法。
二、实验要求
1.按指定要求创建触发器。
三、实验步骤
1.创建一个名为tr_age的触发器,要求在插入和更新时检查AGE是否在15到60之间,如不在15到60,则弹出“年龄不合法”提示信息,SQL代码如下所示:
CREATE TRIGGER tr_age
ON members
FOR INSERT,UPDATE
ASDECLARE @age INTSELECT @age = YEAR(GETDATE())-YEAR(m_birth)FROM insertedIF @age NOT BETWEEN 15 AND 60BEGINROLLBACK TRANSACTIONRAISERROR('年龄不合法',16,10)END
创建完触发器tr_age后,再按F5执行以下更新数据表memebers的SQL代码:
UPDATE members
SET m_birth='2000-6-4'
WHERE m_account='zhao888'
执行此段SQL更新记录代码后,将在结果框中显示以下消息,表示触发了数据表memebers中的触发器tr_age:
服务器: 消息 50000,级别 16,状态 10,过程 tr_age,行 15 年龄不合法
同样,执行以下插入数据表members的SQL代码,也一样会触发器在数据表members中定义的触发器tr_age:
INSERT INTO members VALUES('dy','dy','女','1900-5-4','北京市',1000,'12345')
2.基于“商品表”创建AFTER INSERT触发器tr_insert_price,实现新添记录数据时商品的价格限制在10000以内,SQL代码如下所示:
CREATE TRIGGER tr_insert_price
ON products
AFTER INSERT
ASDECLARE @price moneySELECT @price = p_priceFROM insertedIF @price > 10000BEGINROLLBACK TRANSACTIONRAISERROR('商品价格超出范围',16,10)END
3.查看所创建触发器详细信息,SQL代码如下所示:
USE eshop
EXEC sp_helptrigger members
EXEC sp_helptext tr_age
EXEC sp_helptrigger products
EXEC sp_helptext tr_insert_price
4.添加如下记录,测试tr_insert_price触发器的功能。
‘0240810331’,‘奇瑞小轿车’,‘2005-06-13’,8,‘25860.0’,‘大折扣’
INSERT INTO products VALUES('','奇瑞小轿车','2005-06-13',8,25860.0,'大折扣')
再按F5或点击工具栏上的运行按钮“”,运行插入记录到数据表的SQL代码,将触发在数据表中定义的触发器,在结果框中显示以下消息:
服务器: 消息 50000,级别 16,状态 10,过程 tr_insert_price,行 14 商品价格超出范围
5.基于“商品表”创建AFTER UPDATE触发器tr_update_price,实现修改记录数据时商品的价格限制在10000以内,SQL代码如下所示:
CREATE TRIGGER tr_update_price
ON products
AFTER UPDATE
ASDECLARE @price MONEYSELECT @price = p_priceFROM insertedIF @price > 10000BEGINROLLBACK TRANSACTIONRAISERROR('商品价格超出范围',16,10)END
6.将商品号为“0130810324”的价格修改为12800,测试tr_update_price触发器的功能。(T-SQL)在查询分析器输入如下更新数据表products中记录的SQL代码:
USE eshop
UPDATE products
SET p_price = 12800
WHERE p_no = ''
再按F5或点击工具栏上的运行按钮“”,运行插入记录到数据表的SQL代码,将触发在数据表中定义的触发器,在结果框中显示以下消息:
服务器: 消息 50000,级别 16,状态 10,过程 tr_update_price,行 14 商品价格超出范围
四、注意事项
1.触发器的类型
2.触发器和约束的区别