1、1广州中医药大学信息技术学院实 验 报 告课程名称: 网络数据库编程专业班级: 计算机科学与技术(08)级学生学号: 2008081042学生姓名: 王湛泽实验名称: 触发器的应用实验成绩:课程类别:必修 限选 公选 其它2实验四 触发器的应用实验类型:应用性实验 实验日期: 2011-4-13 实验目的1. 熟悉 Transact_sql 数据库程序设计2. 熟悉触发器的设计及应用实验内容与要求 将 1-5 题的结果文件以题目命名,如题 1,题 2.题 3,题 4。题 5,放在自己的文件夹中。1. 利用 SQL 语句建立一个数据表 STUDENT_INFO,其中包括以下字段:Sno INT
2、NOT NULL,Sname CHAR(10) NOT NULL, Sex CHAR(2) ,Telephone CHAR(16),Deptno char(8) NOT NULL ,SCORE INT建立一个数据表 DEPT_INFO,其中包括以下字段:DEPTNO char(8) NOT NULL PRIMARY KEY,DEPTNAME CHAR(20),DEPTADMIN CHAR(16)CREATE TABLE dbo.STUDENT_INFO(Sno int NOT NULL,Sname char(10) NOT NULL,Sex char(2) NULL,Telephone cha
3、r(16) NULL,Deptno char(8) NOT NULL,SCORE int NULL)GOCREATE TABLE dbo.DEPT_INFO(DEPTNO char(8) NOT NULL,DEPTNAME char(20) NULL,DEPTADMIN char(16) NULL,CONSTRAINT PK_DEPT_INFO PRIMARY KEY CLUSTERED 3(DEPTNO ) ON PRIMARY)GO2. 在表 STUDENT_INFO 中创建一个触发器,将成绩(SCORE)限制在 0-100 之间。注意:CREATE TRIGGER 要在单个批处理中执行C
4、REATE TRIGGER IN_STUON STUDENT_INFOFOR INSERTASBEGINDECLARE X INTSELECT X=SCORE FROM INSERTEDIF(X100)BEGINROLLBACK TRANSACTIONPRINT (成绩 (SCORE)限制在0-100之间)ENDEND3. 使用 JDBC 对数据库的事务操作及触发器 2 种方法实现以下功能。建立两个表:Create Table Student( -学生表StudentID int primary key, -学号)Create Table BorrowRecord( -学生借书记录表Borro
5、wRecord int identity(1,1), -流水号 StudentID int , -学号BorrowDate datetime, -借出时间ReturnDAte Datetime, -归还时间)4要求实验的功能有:(1) 如果更改了学生的学号,希望他的借书记录仍然与这个学生相关(也就是同时更改借书记录表的学号);CREATE TRIGGER UP_StudentON StudentFOR UPDATEASIF UPDATE(StudentID)BEGINUPDATE BorrowRecordSET StudentID=I.StudentID FROM BorrowRecord B
6、, DELETED D, INSERTEDI WHERE B.StudentID=D.StudentID END(2) 如果该学生已经毕业,希望删除他的学号的同时,也删除它的借书记录。CREATE TRIGGER DEL_StudentON StudentFOR DELETEASDELETE BorrowRecordFROM BorrowRecord B , DELETED DWHERE B.StudentID=D.StudentID 4. 验证讲稿中后面 2 张幻灯片练习 1。(以下为理论知识题)6、在 SQL SERVER 中如何获取当前日期和时间?getdate()7、设置在 1 小时后
7、查询表 SALARY。BEGINWAITFOR DELAY 1:00:00SELECT * FROM SALARYEND8、什么是触发器,有什么优点?触发器是一种特殊类型的存储过程,当使用下面的一种或多种数据修改操作在指定表中对数据进行修改时,触发器会生效:UPDATE、INSERT 或 DELETE。触发器可以查询其它表,而且可以包含复杂的 SQL 语句。它们主要用于强制复杂的业务规则或要求。5触 发 器 可 通 过 数 据 库 中 的 相 关 表 实 现 级 联 更 改 ; 不 过 , 通 过 级 联 引 用 完 整性 约 束 可 以 更 有 效 地 执 行 这 些 更 改 。触 发 器
8、可 以 强 制 比 用 CHECK 约 束 定 义 的 约 束 更 为 复 杂 的 约 束 。 与 CHECK 约 束 不 同 , 触 发 器 可 以 引 用 其 它 表 中 的 列 。 例 如 , 触 发 器 可 以 使 用 另一 个 表 中 的 SELECT 比 较 插 入 或 更 新 的 数 据 , 以 及 执 行 其 它 操 作 , 如 修 改 数据 或 显 示 用 户 定 义 错 误 信 息 。 触 发 器 也 可 以 评 估 数 据 修 改 前 后 的 表 状 态 , 并 根 据 其 差 异 采 取 对 策 。 一 个 表 中 的 多 个 同 类 触 发 器 ( INSERT、 U
9、PDATE 或 DELETE) 允 许 采 取多 个 不 同 的 对 策 以 响 应 同 一 个 修 改 语 句 。触发器还有助于强制引用完整性,以便在添加、更新或删除表中的行时保留表之间已定义的关系。然而,强制引用完整性的最好方法是在相关表中定义主键和外键约束。如果使用数据库关系图,则可以在表之间创建关系以自动创建外键约束。触发器的优点如下: 触发器是自动的:它们在对表的数据作了任何修改(比如手工输入或者应用程序采取的操作)之后立即被激活。触发器可以通过数据库中的相关表进行层叠更改。触发器可以强制限制,这些限制比用 CHECK 约束所定义的更复杂。与 CHECK 约束不同的是,触发器可以引用
10、其它表中的列。9、触发器有哪三种类型,并简述触发器的原理。常见的触发器有三种:分别应用于 Insert , Update , Delete 事件。触发器是一种特殊的存储过程,它不能被显式地调用,而是在往表中插入记录、更改记录或者删除记录时,当事件发生时,才被自动地激活。10、Inserted 和 deleted 表的作用是什么?Deleted 与 Inserted 分别表示触发事件的表“旧的一条记录”和“新的一条记录” 。一个数据库系统中有两个虚拟表用于存储在表中记录改动的信息,分别是:虚拟表 Inserted ,虚拟表 Deleted。Inserted 表 保存 insert 或 updat
11、e 以后更新的内容Deleted 表 保存 delete 或 update 前更新的内容11、分别写出如何用系统存储过程实现如下操作 查看表中的触发器select * from sysobjects where xtype=TR 查看触发器的定义文本6exec sp_helptext 触发器名称 查看触发器的所有者和创建日期exec sp_help 触发器名称 查看触发器的相关依赖性sp_depends 触发器名称实验体会 请在下方写出你对本实验的看法,例如你认为实验难度如何?你能够独立实验吗?如果不能,你认为原因是什么?1、实验难度: 难( ) 中等( ) 容易( )2、能否按指定要求,在指定时间内完成所有实验? 能( ) 否( )如果不能,不能完成实验有 (作业提交说明:实验完成后,将此文档和相关的文件一并压缩后提交上来,文件名为自己的学号+实验四,如 2001000001+实验四.RAR )