Advertisement

实验四答案——触发器.sql

  •  5星
  •     浏览量: 0
  •     大小:None
  •      文件类型:None


简介:
本文件为数据库课程设计中的实验四参考答案,主要内容涉及使用SQL创建和操作触发器,以实现数据完整性与业务逻辑自动化。 通过本实验的学习,学生将掌握触发器程序的设计与使用方法。 一、实验内容: 1. 使用银行贷款数据库。 2. 新建一个名为LoanNum的表来统计每个法人单位的贷款次数。为LoanT表创建一个INSERT语句级触发器,在有新的贷款记录插入时更新LoanNum中相应法人的贷款次数。 3. 创建AFTER行级触发器,当修改LoanT表中的贷款金额(Lamount)减少10%时,将此次操作记录到另一张名为L_U的表中。该表包含字段Eno、Bno、Oldamount和Newamount,其中Oldamount表示原始金额,Newamount表示更新后的金额。 4. 创建一个INSTEAD OF行级触发器为贷款表(LoanT)设置完整性规则:如果插入或修改记录时设定的日期(Ldata)早于当前系统时间,则自动将该字段值调整为当前日期。 5. 建立DELETE触发器,当从LoanT中删除某条记录时,会把被删掉的信息及删除时刻存入另一张名为L_D的新表里。此新表包括以下列:Eno, Bno, Ldata, Lamount, Lterm以及Deldata。 二、实验报告: 需要将上述操作的结果整理并写进实验报告中,并对遇到的问题及其解决方案进行总结分析,最后提出自己的见解或结论。

全部评论 (0)

还没有任何评论哟~
客服
客服
  • ——.sql
    优质
    本文件为数据库课程设计中的实验四参考答案,主要内容涉及使用SQL创建和操作触发器,以实现数据完整性与业务逻辑自动化。 通过本实验的学习,学生将掌握触发器程序的设计与使用方法。 一、实验内容: 1. 使用银行贷款数据库。 2. 新建一个名为LoanNum的表来统计每个法人单位的贷款次数。为LoanT表创建一个INSERT语句级触发器,在有新的贷款记录插入时更新LoanNum中相应法人的贷款次数。 3. 创建AFTER行级触发器,当修改LoanT表中的贷款金额(Lamount)减少10%时,将此次操作记录到另一张名为L_U的表中。该表包含字段Eno、Bno、Oldamount和Newamount,其中Oldamount表示原始金额,Newamount表示更新后的金额。 4. 创建一个INSTEAD OF行级触发器为贷款表(LoanT)设置完整性规则:如果插入或修改记录时设定的日期(Ldata)早于当前系统时间,则自动将该字段值调整为当前日期。 5. 建立DELETE触发器,当从LoanT中删除某条记录时,会把被删掉的信息及删除时刻存入另一张名为L_D的新表里。此新表包括以下列:Eno, Bno, Ldata, Lamount, Lterm以及Deldata。 二、实验报告: 需要将上述操作的结果整理并写进实验报告中,并对遇到的问题及其解决方案进行总结分析,最后提出自己的见解或结论。
  • 优质
    本实验通过构建与测试不同类型的数据库触发器,旨在帮助学生理解触发器的工作原理及其在数据完整性控制中的作用。参与者将学习如何编写、调试和部署SQL触发器以增强数据库功能。 本实验基于《数据库系统概论(第五版)习题解析与实验指导》(王珊、萨师煊著),使用SQL Server 2016编写并可运行。
  • :存储过程、和索引
    优质
    本实验旨在通过实践操作,深入理解数据库中存储过程、触发器及索引的概念与应用,提升SQL编程能力。 实验四 存储过程、触发器与索引 一、实验目的: 1. 熟悉大型数据库实验环境,以MS SQL SERVER为例; 2. 掌握视图的使用方法; 3. 深入了解存储过程和触发器的功能及应用; 4. 掌握在MS SQL SERVER中进行数据导入导出的操作技巧; 5. 学习并掌握索引的概念及其对数据库性能的影响。 二、实验内容: (1)基于“实验一”中的数据库“abc”,创建一个视图,该视图展示生产厂家为北京且价格低于同类产品平均价格的所有商品信息。输出结果应包括产品的名称、价格和生产厂商。 (2)利用同一数据库环境下的abc库,编写带有输入参数的存储过程proc_abc, 用于查询指定员工的销售记录。用户需要提供职工编号作为输入条件;若提供的“职工编号”不存在,则需在返回信息中给予相应的提示或错误说明; (3)结合“实验一”的数据库环境,在此练习游标的使用,编写SQL语句以展示按年度统计每种产品的总销售额报表。表头应包括年份、产品号、产品名称以及对应的销售总量和总计金额。 (4)基于abc库中的数据结构特点,设计并实现一个触发器tr_updateprice,在每次向销售记录添加新条目时自动更新对应商品的价格信息,并采用特定的算法来调整价格值; (5)导入100万行网络连接监控数据至数据库中;创建多个不同类型的索引以观察其对文件大小的影响。此外,设计并测试不同的查询语句以便分析索引对于提高检索效率的作用。可以考虑将记录数量扩展到1000万来进一步验证这些影响和效果。 (注意:上述实验内容中的具体操作细节及数据处理步骤应在指导教师的指导下完成,并参考相关的数据库管理教材或官方文档进行学习与实践)
  • SQL Server 用教程(第版)自写(含1至10).zip
    优质
    本书为《SQL Server 实用教程》第四版配套使用,提供从实验一到实验十的答案详解和操作步骤,帮助学生更好地理解和掌握数据库设计、查询及管理技术。 自己写的实验1到实验10的答案中肯定会有错误,请参考时注意。这些答案是免费提供的。
  • Quartus II 报告:RS、D、JK、T ,D 构建二分频和分频电路
    优质
    本实验报告详细记录了在Quartus II软件环境下进行的基本触发器(RS、D、JK、T)实验过程,并深入探讨了利用D触发器设计实现二分频与四分频电路的方法。 在初步学习Quartus软件的过程中,了解各种触发器的工作原理,并使用该软件进行仿真以观察波形图是十分重要的步骤。Dff芯片集成了D型触发器,而单独的7474芯片则包含了一个独立的D型触发器;此外还有JK触发器和TFF(T型)触发器。 二分频触发器的工作机制是在时钟每经过两个周期后输出一个信号周期。例如,在使用脉冲时钟驱动计数器的情况下,每当该计数器累计到两次就将其清零并生成一次新的脉冲信号,这就实现了所谓的“二分频”功能。 四分频则可以通过将两个D触发器串联起来实现。具体来说,当一个时钟脉冲到来时,输入端的数据会被传输至输出端Q,并且同时会有一个反相数据被送到非输出端(即Q的补),然后在下一个时钟周期里重复上述过程但此时的数据已经被取反了。通过这种方式,在每两个连续的时钟信号后,输出端Q上的数值就会发生一次翻转变化,从而实现了二分频的效果,并进一步实现四分频的功能。
  • Quartus II 报告:RS、D、JK、T ,D 构建二分频和分频电路
    优质
    本实验报告通过Quartus II平台详细介绍了RS、D、JK、T触发器的实验操作,并重点探讨了利用D触发器设计二分频和四分频电路的方法。 在初步学习Quartus软件的过程中,了解各种触发器的工作原理并使用该软件进行仿真观察波形图是十分重要的步骤。Dff芯片集成了D型触发器,而7474芯片则提供了单独的D型触发器功能;此外还有JK和T型触发器。 二分频触发器的功能是在时钟每经过两个周期后输出一个信号周期。例如,在使用脉冲时钟来驱动计数器的情况下,每当计数达到两次就清零并产生一次脉冲,则此电路即实现了二分频功能。 四分频触发器可以通过将两个D型触发器级联的方式实现。具体来说,当接收到一个时钟脉冲后,输入的数据会被送到输出端Q,并同时在反向输出端Q非上生成相反的信号;下一个时钟周期到来时,这一过程重复进行但数据已被取反。因此,在每两个时钟周期之后,输出端Q上的数值会发生一次翻转变化,从而实现二分频的效果,进而通过级联方式获得四分频功能。
  • D竞赛人抢电路Multisim
    优质
    本项目设计并实现了一个基于Multisim软件的D触发器竞赛抢答电路。该电路支持四名参赛者同时进行快速响应竞争,采用D触发器确保信号稳定与准确性,在电子工程教育和实践中有广泛应用价值。 D触发器和与非门可以用来设计一个4人抢答电路。该电路设有四个开关(S0~S3),以及四个指示灯。当第一个按下开关的参赛者对应的指示灯会亮起,而其他三个开关即使再被按下去也不会使它们对应的指示灯点亮。 在比赛开始前,所有参与者都处于高电位状态。一旦有人按下按键,电路中的信号将从高电平变为低电平,并产生一个下降沿脉冲信号。这个脉冲信号会触发D触发器的输出改变,使得第一个抢答者的指示灯亮起。由于输入端被锁定,在此之后所有其他开关的操作都不会影响已经点亮的指示灯状态。 设计电路时需要用到以下芯片: - 一片74LS00四2输入与非门 - 一片74LS20双四输入与非门 - 两片74LS74双上升沿D触发器
  • Multisim仿真三:仿真(T)_source52t
    优质
    本实验通过Multisim软件对T触发器进行仿真操作,旨在帮助学生深入理解T触发器的工作原理及其在数字电路设计中的应用。 1. 测试D触发器的逻辑功能。 2. 观察并分析触发器之间的相互转换过程。 3. 使用JK触发器构建双向时钟脉冲电路,并测试其波形。
  • SQL练习题
    优质
    本资源包含多种SQL触发器相关练习题,旨在帮助学习者理解并掌握如何在数据库操作中使用触发器来自动执行特定任务。适合初学者和进阶用户巩固知识。 SQL数据库触发器练习题附加数据库,请完成相关操作以提高技能水平。
  • SQL Server示例
    优质
    本示例介绍如何在SQL Server中创建和使用触发器,通过实际案例展示其功能及应用场景,帮助理解数据库自动化维护。 触发器是一种特殊的存储过程,在SQL Server中不能被显式调用,而是在向表插入、更新或删除记录时自动激活。因此,它们可以用来实施复杂的完整性约束。 每当有数据更改操作发生(如INSERT, UPDATE, DELETE),SQL Server会自动生成两个临时表格:Inserted和Deleted。这两个表的结构与触发器作用的目标表一致,并且仅存在于内存中,在触发器执行完成后即被删除。其中,Deleted表存放由于DELETE或UPDATE语句而从表中移除的所有行;Inserted表则存储由INSERT或UPDATE操作添加到目标表中的所有新记录。 SQL Server 2000支持两种类型的触发器:INSTEAD OF和AFTER。前者替代执行引发它的T-SQL语句,可用于扩展视图的更新能力(除了表格之外)。后者在插入、更新或删除之后运行,并且可以在这些操作完成之前进行约束检查等操作。 如果INSERT, UPDATE 或 DELETE 语句违反了某种约束条件,则相应的After触发器将不会被执行。相反地,INSTEAD OF 触发器可以先于对数据的更改执行,在这种情况下它能够预先处理一些可能会导致错误的操作,并且可以在插入和删除之前进行必要的检查。 创建触发器的基本语法如下: ```sql CREATE TRIGGER trigger_name ON {table_name | view_name} {FOR|AFTER|INSTEAD OF} [INSERT, UPDATE, DELETE] AS sql_statement ``` 示例: 1. 在Orders表中建立一个After触发器,用于检查goods表中的货品状态。如果状态为正在整理(status=1),则阻止订单插入。 ```sql CREATE TRIGGER orderinsert ON orders AFTER INSERT AS IF (SELECT status FROM goods WHERE name = (SELECT goodsname FROM inserted)) = 1 BEGIN PRINT The goods are being processed. Order cannot be committed. ROLLBACK TRANSACTION END ``` 2. 在Orders表建立触发器,当添加新的订单时减少Goods表中的库存。 ```sql CREATE TRIGGER orderinsert1 ON orders AFTER INSERT AS UPDATE goods SET storage = storage - (SELECT quantity FROM inserted WHERE goods.name=goodsname) ``` 3. 在Goods表中创建删除触发器,实现级联删除功能。 ```sql CREATE TRIGGER goodsdelete ON goods AFTER DELETE AS DELETE from orders where goodsname in(SELECT name FROM deleted) ``` 4. 创建防止手动修改订单日期的更新触发器。 ```sql CREATE TRIGGER orderdateupdate ON orders AFTER UPDATE AS IF update(orderdate) BEGIN raiserror(Order date cannot be modified,10,1) ROLLBACK TRANSACTION END ``` 5. 在Orders表中创建一个插入触发器,确保添加到该表中的所有货品名称都已在Goods表中存在。 ```sql CREATE TRIGGER orderinsert3 ON orders AFTER INSERT AS IF (SELECT COUNT(*) FROM goods WHERE name = (SELECT goodsname FROM inserted))=0 BEGIN PRINT No entry in Goods for this Order ROLLBACK TRANSACTION END ``` 6. 在info_details表上创建触发器,用于同步插入、更新和删除操作到索引表中。 ```sql -- 插入触发器示例 CREATE TRIGGER tri_infoDetails_i ON info_details AFTER INSERT AS DECLARE @id INT BEGIN SELECT @id=id FROM inserted; INSERT INTO info_details_index(TYPE, TITLE, content, POST_TIME, FLAG) SELECT type,title,content,getdate(),1 FROM info_details WHERE id=@id END -- 更新触发器示例 CREATE TRIGGER tri_infoDetails_u ON info_details AFTER UPDATE AS DECLARE @id INT BEGIN IF EXISTS(SELECT 1 FROM inserted) AND EXISTS (SELECT 1 FROM deleted) BEGIN SELECT @id=id FROM inserted; INSERT INTO info_details_index(TYPE, TITLE,content, POST_TIME, FLAG) SELECT type,title,content,getdate(),-1 FROM info_details WHERE id=@id; INSERT INTO info_details_index(TYPE,TITLE,content,POST_TIME,FLAG) SELECT type,title,content,getdate(),1 FROM info_details WHERE id=@id END END -- 删除触发器示例 CREATE TRIGGER tri_infoDetails_d ON info_details AFTER DELETE AS DECLARE @id INT BEGIN IF EXISTS(SELECT 1 FROM deleted) BEGIN INSERT INTO info_details_index(TYPE,TITLE,POST_TIME,FLAG) SELECT type,title,getdate(),-1 FROM deleted WHERE id=@id; END END; ```