Advertisement

SQL触发器练习题

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


简介:
本资源包含多种SQL触发器相关练习题,旨在帮助学习者理解并掌握如何在数据库操作中使用触发器来自动执行特定任务。适合初学者和进阶用户巩固知识。 SQL数据库触发器练习题附加数据库,请完成相关操作以提高技能水平。

全部评论 (0)

还没有任何评论哟~
客服
客服
  • SQL
    优质
    本资源包含多种SQL触发器相关练习题,旨在帮助学习者理解并掌握如何在数据库操作中使用触发器来自动执行特定任务。适合初学者和进阶用户巩固知识。 SQL数据库触发器练习题附加数据库,请完成相关操作以提高技能水平。
  • SQL Server 2008
    优质
    本练习册专注于SQL Server 2008触发器的应用与实践,通过丰富的示例和习题帮助读者掌握触发器的设计、调试及优化技巧。 SQL-Server2008触发器练习题
  • SQL Server存储过程与.rar
    优质
    本资源包含多个针对SQL Server中存储过程和触发器设计的实践题目,适合数据库开发人员或学习者进行技能训练及测试。 SQL存储过程习题, SQL触发器习题, SQL基础语法练习题,适合初学者学习使用,类似于W3School的教程风格。
  • SQL(SQL版)
    优质
    《SQL练习题》是一款专为数据库学习者设计的实践工具书,内含大量精选习题,帮助读者在实践中掌握SQL语言,提高数据查询和管理能力。 SQL(结构化查询语言)是一种用于管理和操作关系数据库的标准语言。以下是一些涵盖SELECT、INSERT、UPDATE、DELETE、JOIN、SUBQUERY、AGGREGATE、GROUP BY等语句和函数的SQL练习题: 选择数据: 从 employees 表中选择所有列: ```sql SELECT * FROM employees; ``` 从 employees 表中选择 name、salary 和 department_id 列: ```sql SELECT name, salary, department_id FROM employees; ``` 从 employees 表中选择 name 列,但只显示前10行: ```sql SELECT name FROM employees LIMIT 10; ``` 插入数据: 向 employees 表中插入一条新记录: ```sql INSERT INTO employees (id, name, salary, department_id, hire_date) VALUES (101, John Doe, 50000, 1, 2022-01-01); ```
  • 答案(含测试文档)
    优质
    这段材料提供了关于数据库中触发器的各种练习题的答案,并附有测试文档以供参考和学习使用。适合用于加深对SQL触发器的理解与实践。 当向SC表插入数据时,需要同时更新或添加到SC_NUMBER(包含学生学号及选课门数)中的相关记录;在从SC表删除数据的情况下,也应同步调整SC_NUMBER内的信息;如果对SC表的数据进行修改且更改的是学生的学号,则需相应地改变SC_NUMBER中该生的课程数量统计,并打印“某某的学生选课信息已经更新”的消息。 对于STUDENT表的操作限制如下:禁止改动学生所属系别(尤其是CS系)的信息。同时,向COURSE表添加数据时,若新加入的是以S开头的科目,则其学分不得低于3个单位;此外,在SC表中删除90分以上学生的课程记录也不被允许。 当插入或修改Student表的数据时,要求CS系的学生年龄不得超过30岁。对于该表内年龄字段的变化只能是增加而不能减少。若要从STUDENT表移除某条学生信息,则需要先检查其在SC中的平均成绩是否超过60分;如果符合标准则不允许删除操作,并且必须同时清除掉相关选课记录。 最后,向Student表新增sum_Grade(总分数)和avg_grade(均分)两列。创建一个针对SC的触发器,用以监控数据插入、更新或移除的操作,并据此调整关联学生的累计成绩及平均得分情况;当尝试在已满员的情况下添加新的选课记录时,则需阻止该操作并给出明确提示信息。
  • 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; ```
  • SQL Server50道
    优质
    本资源包含50道精心设计的SQL Server练习题,涵盖基础到高级的各种查询和操作技巧,适合数据库开发人员及学习者提升技能。 SQL Server练习50题,包括基础查询和多表查询等内容。
  • SQL50道.docx
    优质
    这份文档包含了50道精心设计的SQL练习题,旨在帮助学习者通过实践提升SQL查询技能和数据库管理能力。 这套数据库练习题包含50道题目,涵盖了广泛的知识点,并且难度各异。每道题都标有相应的难度等级,方便初学者根据自己的水平选择性地学习。这些题目非常适合数据库新手入门使用,掌握后可以应对大多数SQL面试和实际应用需求。
  • 50个SQL
    优质
    本书包含了50道精心挑选的SQL练习题,旨在帮助读者提高在数据库查询、数据操作及复杂查询等方面的技术水平。适合所有级别的SQL学习者使用。 这里有50道SQL练习题,并附有详细答案。完成这些题目后,你应该能够掌握基本的SQL查询语句。