欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

SQL触发器总结 - sql server 2012数据库基础-触发器及应用-实验报告

程序员文章站 2022-03-09 09:13:48
...

这是我大三第一学期《数据库基础》这门课的实验报告,总共15个实验,我挑了几个比较重要的放在博客上,方便查看和复习,尤其是最近SSM后端开发,希望对大家,以及将来的我有所帮助!


实验要求

在实验5数据库设计的基础上补充设计触发器,并基于实验6插入的数据完成实验

1.为选课表分别建立插入和更新触发器,如果当前学生累计不及格门数达到5门则给出警示信息

2.为课程表分别建立插入和更新触发器来建立约束规则:“专业基础”课的教师必须为“教授”或“副教授”,如果不满足约束则拒绝操作,并给出错误信息。

3.自行再分别设计2~3个触发器(在实验报告中要准确描述功能需求)。

4.设计并执行相关的操作,体会DML触发器的效果和作用。


全部总结链接

SQL基础   (数据库、表、数据的增删改查、视图相关,以及所有实验报告源代码)

游标 (类似C++ 的 指针)

存储过程(类似 C++ 的自定义函数)

触发器 (类似 自定义的陷阱,或者说是监听器,满足某个条件了执行某个方法)

用户权限及权限管理 (类似Windows的多用户管理)

并发控制 (了解多个用户同时对数据造成错误的情况 和 解决方法)

数据恢复(当数据库数据丢失,相应的解决方法)


实验过程

第一题:为选课表分别建立插入和更新触发器,如果当前学生累计不及格门数达到5门则给出警示信息

1.1题目:为选课表分别建立插入和更新触发器,如果当前学生累计不及格门数达到5门则给出警示信息

1.2运行截图:

 

SQL触发器总结 - sql server 2012数据库基础-触发器及应用-实验报告

图 1 第一题运行截图

SQL触发器总结 - sql server 2012数据库基础-触发器及应用-实验报告

 

图 2 运行后,选课表新增4条数据

1.3分析

创建一个触发器,每次在学生表新插入记录时,用sum变量获取该学生挂科的数目,如果满5门,使用raiserror函数弹出警告。


第二题第一部分 插入:

2.1.1 题目:为课程表分别建立插入触发器来建立约束规则:“专业基础”课的教师必须为“教授”或“副教授”,如果不满足约束则拒绝操作,并给出错误信息。

 

2.1.2 运行截图

 

SQL触发器总结 - sql server 2012数据库基础-触发器及应用-实验报告

图 3 先插入一个新老师,职称为讲师

 

SQL触发器总结 - sql server 2012数据库基础-触发器及应用-实验报告

图 4 在课程表创建触发器 功能:(非教授负责的专业基础课,弹警告)

SQL触发器总结 - sql server 2012数据库基础-触发器及应用-实验报告

 

图 5 非专业基础课没报错 专业基础课出错

2.1.3 分析

  先定义一个不让非教授上专业基础课的触发器,然后先新增一个讲师,然后新增这位讲师的任意选修课程,无错误,再尝试新增专业基础课程,弹出警告。


第二题——第二部分 更新:

2.2.1 题目:为课程表分别建立更新触发器来建立约束规则:“专业基础”课的教师必须为“教授”或“副教授”,如果不满足约束则拒绝操作,并给出错误信息。

2.2.2 运行截图:

 

SQL触发器总结 - sql server 2012数据库基础-触发器及应用-实验报告

图 6 尝试将讲师的课程性质改为 ’专业基础’ 出错

SQL触发器总结 - sql server 2012数据库基础-触发器及应用-实验报告

 

图 7  课程改为 ’公共基础’  修改成功

2.2.3 分析:

  更新同插入,只需把代码第三行insert改为update即可。


第三题

自定义触发器1:

3.1.1功能

实现插入学生记录时,如果生源不为‘浙江’,弹出警告

3.1.2运行截图

 

SQL触发器总结 - sql server 2012数据库基础-触发器及应用-实验报告

图 8 实现插入学生记录时,如果生源不为‘浙江’,弹出警告

SQL触发器总结 - sql server 2012数据库基础-触发器及应用-实验报告

 

图 9 插入浙江生源学生 正常插入无报错

3.1.3 分析

  在学生表中定义一个触发器,当插入的数据生源列不为’浙江’的时候,弹出警告,先尝试插入非浙江学生,报错;后插入一个浙江学生,正常插入。


自定义触发器2:

3.2.1功能:实现插入院系记录时,如果院系名称结尾不为’系’且不为’部’,弹出警告

3.2.2运行截图

 

SQL触发器总结 - sql server 2012数据库基础-触发器及应用-实验报告

图 10 插入院系记录时,如果院系名称结尾不为’系’且不为’部’,弹出警告

SQL触发器总结 - sql server 2012数据库基础-触发器及应用-实验报告

 

图 11 如果插入名称结尾为‘系’或为‘部’,正常插入

 

3.2.3 分析

在院系表中定义一个触发器,当插入的数据院系名称列不为’系’或者’部’结尾的时候,弹出警告,先尝试插入院系名称结尾为’院’的数据,报错;后插入一个院系名称结尾为’系’的记录,正常插入。


自定义触发器3:

3.3.1功能:实现插入学生记录时,如果状态不为‘正常’,弹出警告

3.3.2运行截图

SQL触发器总结 - sql server 2012数据库基础-触发器及应用-实验报告转存失败重新上传取消

SQL触发器总结 - sql server 2012数据库基础-触发器及应用-实验报告

图 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