zoukankan      html  css  js  c++  java
  • SQL触发器总结

    这是我大三第一学期《数据库基础》这门课的实验报告,总共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运行截图

    uploading.4e448015.gif转存失败重新上传取消

    图 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
  • 相关阅读:
    第十次作业
    java第九次作业
    优秀的计算机编程类博客 和 文章
    SQLAlchemy使用总结
    Go Web
    beego
    项目注意事项
    爬虫
    Linux笔记
    计算机英语
  • 原文地址:https://www.cnblogs.com/yyzwz/p/13393240.html
Copyright © 2011-2022 走看看