zoukankan      html  css  js  c++  java
  • SQL--实验八

    1.为“图书信息”表创建一个名为del_bk_tr的DELETE触发器,该触发器的作用是禁止删除图书信息表中的记录。
      create trigger del_bk_tr on 图书信息 instead of delete  
    as select'无法删除"图书信息"表的信息'
    
    
    2. 为“借阅信息”表建立一个名为insert_brw_tr的INSERT触发器,当用户向“借阅信息”表中插入记录时,如果插入的记录是在读者信息表没有的借阅证号或者在图书信息表中没有的课程编号,则提示用户不能插入记录,否则提示记录插入成功。
    create trigger insert_brw_tr on 借阅信息
    after insert as
    declare @bno varchar(10),@tsno varchar(10)
    select @bno=(select 借阅证号 from inserted)
    select @tsno=(select 图书编号 from inserted)
    if not exists (select 借阅证号 from 读者信息 where 借阅证号=@bno)
    begin
       delete from 借阅信息 where 借阅证号=@bno
       select '不能插入记录'
    end
    if not exists (select 图书编号 from 图书信息 where 图书编号=@tsno)
    begin
       delete from 借阅信息 where 图书编号=@tsno
       select '不能插入记录'
    end
    if exists (select 借阅证号 from 读者信息 where 借阅证号=@bno) and exists (select 图书编号 from 图书信息 where 图书编号=@tsno)
    begin
       select '记录插入成功。'
    end
    
    3.为“读者信息”表创建一个名为update_bk_tr 的UPDATE触发器,该触发器的作用是禁止更新读者信息表中的“借阅证号”字段的内容。
    CREATE trigger update_bk_tr on 读者信息 
    AFTER UPDATE AS
    declare @BNO1 VARCHAR(10) ,@BNO2 VARCHAR(10)
    SELECT @BNO1=借阅证号 from inserted
    SELECT @BNO2=借阅证号 from deleted
    if @BNO1!=@BNO2
    begin
    print '不能更改借阅证号字段的内容'
    update 读者信息 set 借阅证号=@BNO2 where 借阅证号=@BNO1
    end
    
    4. 使用T-SQL语句DROP  TRIGGER删除update_bk_tr 触发器。
    
    DROP TRIGGER update_bk_tr
    
    
    5.为“图书信息”表建立删除触发器del_bk_tr,要求当图书信息表的记录被删除后,借阅信息表中相应的记录也能自动删除。
    create trigger del_bk_tr on 图书信息
    after delete
    as
    delete from 借阅信息 where 图书编号=(select 图书编号 from deleted)
    
    
    6.在“借阅”表上建立一个触发器,完成如下功能:如果读者借阅的书名是“数据库技术与应用”,就将该读者的借阅记录保存在BORROW_ SAVE表中(注:BORROW_ SAVE表结构与借阅信息表相同,需要先创建这个表)。
      
    CREATE TRIGGER TR_SAVE ON 借阅信息
    	FOR INSERT , UPDATE
    	AS
    	IF  @@ROWCOUNT>0
        INSERT BORROW_SAVE  SELECT  a.*  FROM  INSERTED a , 图书信息 b  WHERE  a.图书编号=b.图书编号 AND  b.书名='数据库技术与应用'
    
    不经一番彻骨寒,哪有梅花扑鼻香?
  • 相关阅读:
    Qt 动画之QPropertyAnimation
    QT 文件的读写
    keil编译程序出现declaration may not appear after executable statement in block 错误 解决办法
    QT UDP通信接受发送数据
    QT 样式表
    QT 滑动条和滚动条的样式
    C++调用dll例子
    MFC非模态窗口gdi+自绘图片
    获取windows操作系统分辨率(DPI)
    单个循环输出数圈(简单易懂)
  • 原文地址:https://www.cnblogs.com/zongyao/p/13831198.html
Copyright © 2011-2022 走看看