SQL触发器总结 - sql server 2012数据库基础-触发器及应用-实验报告
这是我大三第一学期《数据库基础》这门课的实验报告,总共15个实验,我挑了几个比较重要的放在博客上,方便查看和复习,尤其是最近SSM后端开发,希望对大家,以及将来的我有所帮助!
实验要求
在实验5数据库设计的基础上补充设计触发器,并基于实验6插入的数据完成实验
1.为选课表分别建立插入和更新触发器,如果当前学生累计不及格门数达到5门则给出警示信息
2.为课程表分别建立插入和更新触发器来建立约束规则:“专业基础”课的教师必须为“教授”或“副教授”,如果不满足约束则拒绝操作,并给出错误信息。
3.自行再分别设计2~3个触发器(在实验报告中要准确描述功能需求)。
4.设计并执行相关的操作,体会DML触发器的效果和作用。
全部总结链接
SQL基础 (数据库、表、数据的增删改查、视图相关,以及所有实验报告源代码)
游标 (类似C++ 的 指针)
存储过程(类似 C++ 的自定义函数)
触发器 (类似 自定义的陷阱,或者说是监听器,满足某个条件了执行某个方法)
用户权限及权限管理 (类似Windows的多用户管理)
并发控制 (了解多个用户同时对数据造成错误的情况 和 解决方法)
数据恢复(当数据库数据丢失,相应的解决方法)
实验过程
第一题:为选课表分别建立插入和更新触发器,如果当前学生累计不及格门数达到5门则给出警示信息
1.1题目:为选课表分别建立插入和更新触发器,如果当前学生累计不及格门数达到5门则给出警示信息
1.2运行截图:
图 1 第一题运行截图
图 2 运行后,选课表新增4条数据
1.3分析
创建一个触发器,每次在学生表新插入记录时,用sum变量获取该学生挂科的数目,如果满5门,使用raiserror函数弹出警告。
第二题第一部分 插入:
2.1.1 题目:为课程表分别建立插入触发器来建立约束规则:“专业基础”课的教师必须为“教授”或“副教授”,如果不满足约束则拒绝操作,并给出错误信息。
2.1.2 运行截图
图 3 先插入一个新老师,职称为讲师
图 4 在课程表创建触发器 功能:(非教授负责的专业基础课,弹警告)
图 5 非专业基础课没报错 专业基础课出错
2.1.3 分析
先定义一个不让非教授上专业基础课的触发器,然后先新增一个讲师,然后新增这位讲师的任意选修课程,无错误,再尝试新增专业基础课程,弹出警告。
第二题——第二部分 更新:
2.2.1 题目:为课程表分别建立更新触发器来建立约束规则:“专业基础”课的教师必须为“教授”或“副教授”,如果不满足约束则拒绝操作,并给出错误信息。
2.2.2 运行截图:
图 6 尝试将讲师的课程性质改为 ’专业基础’ 出错
图 7 课程改为 ’公共基础’ 修改成功
2.2.3 分析:
更新同插入,只需把代码第三行insert改为update即可。
第三题
自定义触发器1:
3.1.1功能
实现插入学生记录时,如果生源不为‘浙江’,弹出警告
3.1.2运行截图
图 8 实现插入学生记录时,如果生源不为‘浙江’,弹出警告
图 9 插入浙江生源学生 正常插入无报错
3.1.3 分析
在学生表中定义一个触发器,当插入的数据生源列不为’浙江’的时候,弹出警告,先尝试插入非浙江学生,报错;后插入一个浙江学生,正常插入。
自定义触发器2:
3.2.1功能:实现插入院系记录时,如果院系名称结尾不为’系’且不为’部’,弹出警告
3.2.2运行截图
图 10 插入院系记录时,如果院系名称结尾不为’系’且不为’部’,弹出警告
图 11 如果插入名称结尾为‘系’或为‘部’,正常插入
3.2.3 分析
在院系表中定义一个触发器,当插入的数据院系名称列不为’系’或者’部’结尾的时候,弹出警告,先尝试插入院系名称结尾为’院’的数据,报错;后插入一个院系名称结尾为’系’的记录,正常插入。
自定义触发器3:
3.3.1功能:实现插入学生记录时,如果状态不为‘正常’,弹出警告
3.3.2运行截图
图 12 插入学生记录时,如果状态不为‘正常’,弹出警告
3.3.3 分析
在学生表中定义一个触发器,当插入的学生数据 状态列 不为’正常’的时候,弹出警告,先尝试插入状态为留级的记录,报错;后插入状态为正常的记录,正常插入。
实验总结
触发器我的理解就是人为设置一个‘异常陷阱’,当用户对表中数据进行增删改时,会**促发其执行相应的操作,也算是对表中数据的一种约束。
其中rollback transaction语句可以让警告的时候不执行增删改语句,如果不加这句警告时还会执行增删改操作。
基本语法:
create trigger 触发器名on 表名
for insert/update/delate
as
declare 变量 数据类型
if 主键 is not null
begin
if 警告条件
begin
raiserror('需要弹出的警告信息',16,10)
rollback transaction
end
end
上一篇: SQL Server—触发器