• 数据库原理及应用实验报告-实验10-触发器


    数据库原理及应用实验报告

     实验题目  实验10触发器  

    10.1 实验目的

    通过实验使学生加深对数据完整性的理解,学会理解、创建和使用触发器。

    10.2 实验内容  (用实验9的Teacher表)

    (1) 为Teacher表建立触发器T1,当插入或使更新表中的数据时,保证所操作的纪录的Tage值大于0。

    (2) 为Teacher表建立触发器T2,禁止删除编号为00001的CEO。

    (3) Teacher表中的人员的编号是唯一且不可更变的,创建触发器T3实现更新中编号的不可改变性。

    (4) 演示违反T1触发器的约束的插入操作。

    (5) 演示违反T1触发器的约束的更新操作。

    (6) 演示违反T2触发器的约束的插入操作。

    (7) 演示违反T2触发器的约束的更新操作。

    10.3 实验步骤

    (1) 仍然使用自定义完整性实验中的Teacher表。为此表建立触发器T1,当插入或使更新表中的数据时,保证所操作的纪录的Tage值大于0。

    在新建查询窗口中输入如下SQL语句

    1. USE University_Mis
    2. GO
    3. CREATE TRIGGER T1 ON Teacher
    4. FOR INSERT,UPDATE
    5. AS
    6. IF(SELECT Tage FROM INSERTED)<1
    7. BEGIN
    8. PRINT ‘职工年龄必须是大于0的整数! 操作失败!’
    9. ROLLBACK TRANSACTION
    10. END

    命令成功执行,如下图1

     

    图1

     (2) 为Teacher表建立触发器T2,禁止删除编号为S01的CEO。

    在新建查询窗口中输入如下SQL语句

    1. USE University_Mis
    2. GO
    3. CREATE TRIGGER T2 ON Teacher
    4. FOR DELETE
    5. AS
    6. IF(SELECT Tno FROM DELETED)=’T01’
    7. BEGIN
    8. PRINT ‘此人是CEO! 删除操作失败!
    9. ROLLBACK TRANSACTION
    10. END

    命令成功,如图2

     

    图2

    (3) Teacher表中的人员的编号是唯一且不可更变的,创建触发器T3实现更新中编号的不可改变性。

    在新建查询窗口中输入如下SQL语句

    1. USE University_Mis
    2. GO
    3. CREATE TRIGGER T3 ON Teacher
    4. FOR UPDATE
    5. AS
    6. IF UPDATE(Tno)
    7. BEGIN
    8. PRINT ‘职工编号不能修改!’
    9. ROLLBACK TRANSACTION
    10. END

    命令成功,如图3

     

    图3

    (4) 在新建查询窗口中输入如下SQL语句

    1. USE University_Mis
    2. INSERT INTO Teacher VALUES(‘T03’,’ 李宏’,’F’,-10,’开发部’)

    插入元组失败,因为限制了年龄必须大于0,而这里是-10.如下图4

     

    图4

    错误消息:

    职工年龄必须是大于0的整数! 操作失败!
    消息 3609,级别 16,状态 1,第 1 行
    事务在触发器中结束。批处理已中止

    (5) 在新建查询窗口中输入如下SQL语句

    1. USE University_Mis
    2. UPDATE Teacher SET Tage=-7 WHERE Tno=’T01’

    更新数据失败,因为限制了年龄必须大于0,而这里是-7,如下图5

     

    图5

         错误消息:

         职工年龄必须是大于0的整数! 操作失败!

    消息 3609,级别 16,状态 1,第 1 行
    事务在触发器中结束。批处理已中止。

    (6) 在新建查询窗口中输入如下SQL语句

    1. USE University_Mis
    2. DELETE FROM Teacher WHERE Tname=’李用’

    删除失败,因为限制了删除CEO,而李用是CEO,报错如图6

     

    图6

    错误消息:

    此人是CEO! 删除操作失败!
    消息 3609,级别 16,状态 1,第 1 行
    事务在触发器中结束。批处理已中止。

    (7) 在新建查询窗口中输入如下SQL语句

    1. USE University_Mis
    2. UPDATE Teacher SET Tno=’T07’ WHERE Tsex=’F’

    更新元组失败,因为限制了不能修改Tno属性,报错,如图7

     

    图7

    错误消息:

    职工编号不能修改!
    消息 3609,级别 16,状态 1,第 1 行
    事务在触发器中结束。批处理已中止。

    10.4 实验要求

    (1) 实验之前请细细阅读实验总体要求与说明指导书

    (2 ) 在SQL Server 2005或2008或2014的SSMS环境中,完成以上实验(1)-(7)步所有SQL数据定义操作,并将其中粗体步骤的操作窗口剪贴到实验报告中。

    10.5实验体会

    1)实验反思

      无

    2)实验收获

    触发器会在当系统检测数据中有违反完整性约束条件时给出用户必要的提示信息,还会引起系统内部自动进行某些操作,已消除违反完整性约束条件所引起的负面影响,具有安全保护的功能。

    附录:

  • 相关阅读:
    曙光云使用说明
    ROS1云课→29如何借助ROS实现走迷宫机器人
    【笔记】《C++性能优化指南》Ch3 测量性能
    「Redis」06 事务与锁机制
    vue3-vant4-vite-pinia-axios-less学习日记
    模糊测试面面观 | 车联网场景模糊测试解决方案
    一个简单的HTML网页 、个人主页网页设计(HTML+CSS)
    qt wsdl 接口调用(gsoap)
    QT软件开发-基于FFMPEG设计视频播放器-支持软解与硬解-完整例子(六)
    Java设计模式 _行为型模式_空对象模式
  • 原文地址:https://blog.csdn.net/cangzhexingxing/article/details/125563847