实验六 数据库编程

一、实验目的

1.掌握触发器的概念,了解触发器的类型

2.掌握存储过程的创建与执行方法

二、实验内容

1、 创建触发器trigger_delete,实现以下功能:当订单表的数据被删除时,显示提示信息“订单表记录被修改了”。

CREATE TRIGGER trigger_delete
ON Sell_Order
AFTER DELETE
AS
PRINT '订单表记录被修改了';

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KxJbgZth-1654698096621)(D:\typora\Picture\image-20220520232220350.png)]

2、 对Sell_Order表创建名为reminder的触发器,当用户向Sell_Order表中插入或修改记录时,自动显示Sell_Order表中的记录。

CREATE TRIGGER Trigger_reminder
ON Sell_Order
AFTER INSERT,UPDATE
AS
SELECT *
FROM Sell_Order

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-K1Cdsyez-1654698096622)(D:\typora\Picture\image-20220520233533967.png)]

创建名为reminder的触发器时会命名冲突

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-X2wZ2VJ0-1654698096622)(D:\typora\Picture\image-20220520233740467.png)]

3、 对Employee表中创建名为emp_updtri的触发器,实现如下功能:当修改姓名时,自动检查订单表,确定是否有该员工的订单,如果存在该员工,则撤销操作。

CREATE TRIGGER emp_upd
ON Employee
AFTER UPDATE
AS
IF UPDATE(EmployeeName)
DECLARE @ID INT
SELECT @ID=EmployeeID
FROM deleted
IF EXISTS(SELECT *
			FROM Sell_Order
			WHERE Sell_Order.SellOrderID=@ID)
BEGIN
PRINT '员工已存在订单' 
ROLLBACK
END

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xFzifukY-1654698096623)(D:\typora\Picture\image-20220520235536750.png)]

4、 创建一个INSERT触发器,当在Employee表中插入一条新员工记录时,如果是“人事部”的员工,则撤销该插入操作,并返回出错消息。

ALTER TRIGGER Empoyee_Insert
ON Employee
AFTER INSERT
AS
DECLARE @DID CHAR(50)
SELECT @DID=DepartmentID FROM inserted
IF (SELECT DepartmentName
	FROM Department
	WHERE DepartmentID=@DID
	)='人事部'
BEGIN
PRINT '禁止插入人事部成员'
ROLLBACK
END

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tmyVmIcs-1654698096624)(D:\typora\Picture\image-20220521001335374.png)]

5、 创建一个product_order_delete的触发器,其功能是:当删除商品表中的商品记录时,同时删除订单表中相应的订单,并显示提示信息“有关商品已被删除”。

CREATE TRIGGER product_order_delete
ON Product
INSTEAD OF DELETE 
AS
DECLARE @Pid int
SELECT @Pid=ProductID
FROM deleted
DELETE
FROM Purchase_order
WHERE Purchase_order.ProductID=@Pid
DELETE
FROM Product
WHERE ProductID=@Pid
PRINT '有关商品已被删除'

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AT4twLwc-1654698096624)(D:\typora\Picture\image-20220521002356169.png)]

6、 创建一个名为employee_deleted的触发器,其功能是:当对Employee表进行删除操作时,首先检查订单表,如果删除的员工没有接收订单,可以删除该员工的消息,否则撤销删除,显示“无法修改”的信息。

ALTER TRIGGER employee_delete
ON Employee
INSTEAD OF DELETE
AS
DECLARE @EID INT
SELECT @EID=EmployeeID
FROM deleted
IF EXISTS(SELECT SellOrderID
		  FROM Sell_Order
		  WHERE EmployeeID=@EID
		  )
BEGIN
PRINT '无法修改'
END
ELSE
DELETE
FROM Employee
WHERE EmployeeID=@EID

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lDF672oR-1654698096624)(D:\typora\Picture\image-20220521004208055.png)]

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值