文章目录

  • 一、实验目的
  • 二、实验内容
  • 三、过程以及记录
    • 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触发器相关推荐

  1. 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 ...

  2. SQL实验六  数据库的完整性控制

    实验六  数据库的完整性控制 一.实验目的 (1).理解SQL Server的实体完整性.参照完整性和用户自定义的完整性. (2).掌握SQL Server中实体完整性的建立,实践违反实体完整性的结果 ...

  3. 数据库实验六 触发器实验

    一. 实验目的 1. 理解触发器的作用和工作机制: 2. 掌握某一具体DBMS的SQL编程语言,在前面创建的数据库基础上,定义BEFORE触发器和AFTER触发器,并验证设计的触发器是否起作用. 二. ...

  4. 数据库实验六 数据库的完整性

    实验六 数据库的完整性 一.实验目的 1.掌握实体完整性的定义和维护方法. 2.掌握参照完整性的定义和维护方法. 3.掌握用户自定义完整性的定义和维护方法. 4.掌0握触发器的设计和使用方法 二.实验 ...

  5. 20155201 网络攻防技术 实验六 信息搜集与漏洞

    20155201 网络攻防技术 实验六 信息搜集与漏洞 一.实践内容 各种搜索技巧的应用 DNS IP注册信息的查询 基本的扫描技术:主机发现.端口扫描.OS及服务版本探测.具体服务的查点 漏洞扫描: ...

  6. 实验六——存储过程实验

    实验六--存储过程实验 一.实验题目 二.实验目的 三.实验过程 (一)准备数据表 (二)存储过程实验 [存储过程简介] [存储过程优点] 1.创建存储过程 2.查看存储过程 3.修改存储过程 4.删 ...

  7. 《数据库原理》实验六 SQL数据查询实验

    本系列传送门: 实验二 SQL Server SSMS工具创建和管理数据库及数据表 实验三 SQL Server SSMS工具添加数据 实验四 SQL的数据定义语句 实验五 数据库完整性约束的实现与验 ...

  8. 实验六201771010101 白玛次仁

    第五章 继承 总结 实验六 继承定义与使用实验时间 2018-9-28 1.类,超类与子类 继承Employee类来定义Manager类格式,关键字extends表示继承. Class新类名(子类(s ...

  9. matlab 求obb,实验六MATLAB神经网络工具箱DOC

    实验六MATLAB神经网络工具箱DOC 实验七MATLAB神经网络工具箱一.实验目的1.掌握 Matlab 对感知器网络的构建与训练方法.2.掌握 Matlab 对线性神经网络的构建与训练方法.3.掌 ...

  10. 实验六 连续信号的频域分析

    实验六 连续信号的频域分析 一.实验目的 二.实验原理 1.傅立叶变换的MATLAB实现 (1) 调用专用函数实现 MATLAB中实现傅里叶变换的函数为: MATLAB中实现傅里叶反变换的函数 ( ...

最新文章

  1. AI一分钟 | Google预借京东卖音箱;AI Dota击败人类玩家;思必驰5亿融资搞芯片
  2. 【TensorFlow2.0】数据读取与使用方式
  3. python的property用法_Python 中@property的用法
  4. 第五十四期:Libra盟友纷纷“跳船”,联盟链还有戏吗?
  5. HEVC/H265 文档获得
  6. python如何并发上千个get_Python拓展21(python3X之百万并发借鉴)
  7. 原创案例文章:安徽淮南矿业集团网络分析案例
  8. JDK默认是little-endian
  9. 修改卡巴斯基注册表,无限试用
  10. 云路php解密网站源码_云路PHP解密-免费PHP文件解密工具
  11. c++第二课 输出自定义字符图形
  12. Lisp语言中的print函数
  13. 生成pdf设置中文字体出错Identity-H' is not recognized
  14. 金山篡改浏览器主页问题(改成毒霸网址大全)
  15. linux winscp 乱码,WinSCP无法登陆、乱码及关联Putty的设置
  16. Diagnostic Viewer 显示空白
  17. 易签指纹签到系统测试文档
  18. element中表格展开行的默认展开和收起
  19. 关于python格式对齐的问题_解决python对齐错误的方法
  20. 我的一加5刷机基本步骤

热门文章

  1. 内蒙古大学892程序设计
  2. 【Quant】BigQuant学习笔记(2) 可视化策略
  3. Cleaning Shifts 题解
  4. PayPal/Stripe/Square 轮询收单系统
  5. EVO轨迹评估工具显示界面设置
  6. 信创操作系统--麒麟Kylin桌面版(项目四 文件与目录管理:浏览、管理、查找、共享、解压缩等)
  7. 「低代码系列报道」华为云打造行业aPaaS集群,抢占SaaS发展黄金十年
  8. 使用SQL Server 获取插入记录后的ID(自动编号)
  9. go中文网第二期培训教程
  10. 百度登陆POST参数分析,password及其他字段的js处理