实验六、完整性控制(包含触发器的使用方法)——SQLServer触发器
文章目录
- 一、实验目的
- 二、实验内容
- 三、过程以及记录
- 1、创建一个触发器,“数据库”课程的选课人数不能超过5人。
- 2、创建一个触发器,规定每位同学选课门数不能超过3门。
- 3、创建一个触发器,当修改成绩表中成绩时,如果变化幅度超过10%,将操作记录在下表SC_U(Sno,Cno,Oldgrade,Newgrade)中。
- 四、SQL文件
一、实验目的
1.掌握数据库完整性控制原理
2.掌握SQL Server数据库系统完整性控制方法
二、实验内容
1. 创建一个触发器,“数据库”课程的选课人数不能超过5人。
2..创建一个触发器,规定每位同学选课门数不能超过3门。
3. 创建一个触发器,当修改成绩表中成绩时,如果变化幅度超过10%,将操作记录在下表SC_U(Sno,Cno,Oldgrade,Newgrade)中。
三、过程以及记录
1.写出你操作并正确执行的代码及结果。
1、创建一个触发器,“数据库”课程的选课人数不能超过5人。
创建一个触发器,“数据库”课程的选课人数不能超过5人。
--创建触发器
CREATE TRIGGER myFristNotByCount ON T.SC
AFTER INSERT,UPDATE
AS
DECLARE @Count INT,@Cno CHAR(4),@Sno CHAR(9)
SELECT @Count = COUNT(*) FROM T.Course a,T.SC b
WHERE a.Cno = b.Cno AND a.Cname = '数据库';SELECT @Sno = Sno,@Cno = Cno FROM INSERTED;
IF(@Count>5)
BEGIN
DELETE FROM T.SC WHERE Sno = @Sno AND Cno = @Cno;
END--测试
INSERT INTO T.SC VALUES('201215121',1,52),
('201215122',1,52),('201215123',1,52),
('201215125',1,52),('201215126',1,52),('201215127',1,52);--查询数据库的选课记录
SELECT COUNT(*) 数量 FROM T.Course a,T.SC b
WHERE a.Cno = b.Cno AND a.Cname = '数据库';
2、创建一个触发器,规定每位同学选课门数不能超过3门。
创建一个触发器,规定每位同学选课门数不能超过3门。
--创建触发器
CREATE TRIGGER MyTriggerByCourse ON T.SC
AFTER INSERT
AS
DECLARE @Count INT,@Sno CHAR(9),@Cno CHAR(4)
SELECT @Sno = Sno,@Cno = Cno FROM INSERTED;
SELECT @Count = COUNT(*) FROM T.SC;
IF(@Count>3)
BEGIN
DELETE FROM T.SC WHERE Sno = @Sno AND Cno = @Cno;
END--测试(两个人分别添加6条选课记录)
INSERT INTO T.SC VALUES('201215121',1,52),
('201215122',1,52),('201215123',1,52),
('201215125',1,52),('201215126',1,52),('201215127',1,52);INSERT INTO T.SC VALUES('201215121',2,52),
('201215122',2,52),('201215123',2,52),
('201215125',2,52),('201215126',2,52),('201215127',2,52);--验证
SELECT a.Cno 课程名,a.Cname,COUNT(a.Cno) 数量 FROM T.Course a,T.SC b
WHERE a.Cno = b.Cno
GROUP BY a.Cno,a.Cname;
3、创建一个触发器,当修改成绩表中成绩时,如果变化幅度超过10%,将操作记录在下表SC_U(Sno,Cno,Oldgrade,Newgrade)中。
创建一个触发器,当修改成绩表中成绩时,如果变化幅度超过10%,将操作记录在下表SC_U(Sno,Cno,Oldgrade,Newgrade)中。
--创建表T.SC_U
CREATE TABLE T.SC_U(
id INT IDENTITY(1,1),
Sno CHAR(9),
Cno CHAR(4),
Oldgrade SMALLINT,
Newgrade SMALLINT,
UpdateTime datetime,--更新时间
PRIMARY KEY(id),
FOREIGN KEY (Sno) REFERENCES T.Student(Sno),
FOREIGN KEY (Cno) REFERENCES T.Course(Cno)
)--创建触发器
CREATE TRIGGER MyTriggerGradeUpdate ON T.SC
AFTER UPDATE
AS
DECLARE @Grade_old SMALLINT,@jexianZ SMALLINT,@jexianJ SMALLINT,@Grade_new SMALLINT,@Sno CHAR(9),@Cno CHAR(4)
SELECT @Grade_old = Grade,@Sno = Sno,@Cno = cno FROM DELETED;
SELECT @Grade_new = Grade,@Sno = Sno,@Cno = Cno FROM INSERTED;
SET @jexianZ = @Grade_old+@Grade_old*0.1;
SET @jexianJ = @Grade_old-@Grade_old*0.1;
IF(@Grade_new > @jexianZ)
BEGIN
PRINT('增幅的界限为:');
PRINT(@jexianZ);
INSERT INTO T.SC_U VALUES(@Sno,@Cno,@Grade_old,@Grade_new,GETDATE())
END
IF(@Grade_new < @jexianJ)
BEGIN
PRINT('向下增幅的界限为:');
PRINT(@jexianJ);
INSERT INTO T.SC_U VALUES(@Sno,@Cno,@Grade_old,@Grade_new,GETDATE())
END
结果截图:
——————————————————————————————————
测试触发器
--测试
--向上幅度大于10%
select * FROM T.SC WHERE Sno ='201215127' AND Cno = '1';--原始值
UPDATE T.SC SET Grade = '90' WHERE Sno ='201215127' AND Cno = '1';
select * FROM T.SC WHERE Sno ='201215127' AND Cno = '1';--更新后的值
SELECT * FROM T.SC_U WHERE Sno ='201215127' AND Cno = '1';--查表检查结果是否被记录是否被记录
——————————————————————————————————
--向上幅度小于10%
select * FROM T.SC WHERE Sno ='201215127' AND Cno = '1';
UPDATE T.SC SET Grade = '73' WHERE Sno ='201215127' AND Cno = '1';
select * FROM T.SC WHERE Sno ='201215127' AND Cno = '1';
SELECT * FROM T.SC_U WHERE Sno ='201215127' AND Cno = '1';
——————————————————————————————————
--向下幅度大于10%
select * FROM T.SC WHERE Sno ='201215126' AND Cno = '1';
UPDATE T.SC SET Grade = '30' WHERE Sno ='201215126' AND Cno = '1';
select * FROM T.SC WHERE Sno ='201215126' AND Cno = '1';
SELECT * FROM T.SC_U WHERE Sno ='201215126' AND Cno = '1';
——————————————————————————————————
--向下幅度小于10%
select * FROM T.SC WHERE Sno ='201215126' AND Cno = '1';
UPDATE T.SC SET Grade = '24' WHERE Sno ='201215126' AND Cno = '1';
select * FROM T.SC WHERE Sno ='201215126' AND Cno = '1';
SELECT * FROM T.SC_U WHERE Sno ='201215126' AND Cno = '1';
四、SQL文件
点击此处下载:SQL文件(提供数据库含表接结构和触发器源码)
提取码:ghzn
实验六、完整性控制(包含触发器的使用方法)——SQLServer触发器相关推荐
- sqlserver触发器详解:sqlserver触发器after/for和instead of的区别详解(实例讲解),触发器定义创建操作打通,触发器的优缺点,触发器使用建议
文章目录 1.触发器介绍 2.特点 3.DML触发器分类 4.inserted表与deleted表 4.1 表介绍 4.2 创建时机 5.定义触发器 5.1 定义触发器 5.2 分类 5.2.1 AF ...
- SQL实验六 数据库的完整性控制
实验六 数据库的完整性控制 一.实验目的 (1).理解SQL Server的实体完整性.参照完整性和用户自定义的完整性. (2).掌握SQL Server中实体完整性的建立,实践违反实体完整性的结果 ...
- 数据库实验六 触发器实验
一. 实验目的 1. 理解触发器的作用和工作机制: 2. 掌握某一具体DBMS的SQL编程语言,在前面创建的数据库基础上,定义BEFORE触发器和AFTER触发器,并验证设计的触发器是否起作用. 二. ...
- 数据库实验六 数据库的完整性
实验六 数据库的完整性 一.实验目的 1.掌握实体完整性的定义和维护方法. 2.掌握参照完整性的定义和维护方法. 3.掌握用户自定义完整性的定义和维护方法. 4.掌0握触发器的设计和使用方法 二.实验 ...
- 20155201 网络攻防技术 实验六 信息搜集与漏洞
20155201 网络攻防技术 实验六 信息搜集与漏洞 一.实践内容 各种搜索技巧的应用 DNS IP注册信息的查询 基本的扫描技术:主机发现.端口扫描.OS及服务版本探测.具体服务的查点 漏洞扫描: ...
- 实验六——存储过程实验
实验六--存储过程实验 一.实验题目 二.实验目的 三.实验过程 (一)准备数据表 (二)存储过程实验 [存储过程简介] [存储过程优点] 1.创建存储过程 2.查看存储过程 3.修改存储过程 4.删 ...
- 《数据库原理》实验六 SQL数据查询实验
本系列传送门: 实验二 SQL Server SSMS工具创建和管理数据库及数据表 实验三 SQL Server SSMS工具添加数据 实验四 SQL的数据定义语句 实验五 数据库完整性约束的实现与验 ...
- 实验六201771010101 白玛次仁
第五章 继承 总结 实验六 继承定义与使用实验时间 2018-9-28 1.类,超类与子类 继承Employee类来定义Manager类格式,关键字extends表示继承. Class新类名(子类(s ...
- matlab 求obb,实验六MATLAB神经网络工具箱DOC
实验六MATLAB神经网络工具箱DOC 实验七MATLAB神经网络工具箱一.实验目的1.掌握 Matlab 对感知器网络的构建与训练方法.2.掌握 Matlab 对线性神经网络的构建与训练方法.3.掌 ...
- 实验六 连续信号的频域分析
实验六 连续信号的频域分析 一.实验目的 二.实验原理 1.傅立叶变换的MATLAB实现 (1) 调用专用函数实现 MATLAB中实现傅里叶变换的函数为: MATLAB中实现傅里叶反变换的函数 ( ...
最新文章
- AI一分钟 | Google预借京东卖音箱;AI Dota击败人类玩家;思必驰5亿融资搞芯片
- 【TensorFlow2.0】数据读取与使用方式
- python的property用法_Python 中@property的用法
- 第五十四期:Libra盟友纷纷“跳船”,联盟链还有戏吗?
- HEVC/H265 文档获得
- python如何并发上千个get_Python拓展21(python3X之百万并发借鉴)
- 原创案例文章:安徽淮南矿业集团网络分析案例
- JDK默认是little-endian
- 修改卡巴斯基注册表,无限试用
- 云路php解密网站源码_云路PHP解密-免费PHP文件解密工具
- c++第二课 输出自定义字符图形
- Lisp语言中的print函数
- 生成pdf设置中文字体出错Identity-H' is not recognized
- 金山篡改浏览器主页问题(改成毒霸网址大全)
- linux winscp 乱码,WinSCP无法登陆、乱码及关联Putty的设置
- Diagnostic Viewer 显示空白
- 易签指纹签到系统测试文档
- element中表格展开行的默认展开和收起
- 关于python格式对齐的问题_解决python对齐错误的方法
- 我的一加5刷机基本步骤