数据库实验6触发器实验报告
实验六 触发器实验报告

实验五 触发器实验报告[实验目的]1. 理解Oracle 触发器的种类和用途2. 掌握行级触发器的编写[预备知识]1. PL/SQL 程序设计[实验原理]1. 建立触发器CREATE [OR REPLACE] TRIGGER <触发器名>BEFORE|AFTERINSERT|DELETE|UPDATE OF <列名> ON <表名>[FOR EACH ROW]WHEN (<条件>)<PL/SQL 程序块>ON 子句中的名称识别与数据库触发器关联的数据库表触发器事件指定了影响表的 SQL DML 语句 ( INSERT 、 DELETE 或 UPDATE)AFTER 指定了触发器在处理完成后触发BEFORE 指定了触发器在处理完成前触发默认情况下,触发器每个表触发一次FOR EACH ROW 选项指定触发器每行触发一次(即触发器为行级触发器)要使触发器触发,WHEN 子句中布尔型表达式的值必须判定为 TRUE可以将 REPLACE 添加到 CREATE 语句以自动删除和重建触发器2. 行级触发器中引用表数据在行级触发器中,使用伪记录来表示旧数据:old 和新数据:new引用示例::new.customer_name, :old.customer_name3. 行级触发器中的谓词在一个多条件触发的触发器中,使用谓词可以区分当前触发的操作的类型:触发事件 :old :newInsert 无定义,所有字段都是NULL该语句完成后插入的值Update 更新前该行的旧值 更新后该行的值Delete 删除前该行的值 无定义,所有字段inserting,updating,deleting。
示例:IF Inserting THEN语句;END IF;IF Updating THEN语句;END IF; IF Deleting THEN语句;END IF;4.触发器的限制SELECT 语句必须是SELECT INTO 语句或内部游标声明。
实验六 触发器实验报告

实验六触发器实验报告
触发器是数据库中非常重要的组成部分,它可以触发特定的动作,多用于数据库的实时更新和存储过程的管理。
本次实验主要了解不同类型的触发器,应用在增删改查动作中的效果,以增强数据库安全性和完整性。
首先,我们创建库,然后建立一张名为学生信息的表,用于存放学生的信息,包括姓名、学号、性别等,再建立一张名为考试成绩的表,用于存放考试成绩,包括课程名称、成绩等。
接着,我们分别使用表级、行级、语句级的触发器来监视学生信息和考试成绩表的增删改查操作,可以通过结果看出触发器的效果。
例如,使用表级触发器,在插入新学生信息或修改存在学生信息时,触发器会自动根据触发条件将其记录在日志表中;使用行级触发器,当有学生成绩超过及格线时,改变考试成绩的状态;使用语句级触发器,当考试成绩有更新时,将记录学生更新信息。
通过本次实验,我们能够熟悉触发器的使用,学会不同类型触发器之间的区别以及应用在数据库操作上的效果,大大提高了数据库的安全性和完整性。
数据库实验6触发器

实验6 触发器一、实验目的1.了解触发器的基本概念和功能。
2.掌握触发器的创建和使用方法。
二、相关知识创建触发器的语法为:CREATE TRIGGER <触发器名> ON <表名>[WITH ENCRYPTION]FOR {[DELETE][,][INSERT][,][UPDATE]}[WITH APPEND][NOT FOR REPLICATION]AS <SQL 语句组>其中:1)WITH ENCRYPTION 为加密选项。
2)DELETE 选项为创建DELETE 触发器。
DELETE触发器的作用是当对表执行DELETE操作时触发器被激活,并从指定表中删除元组,同时将删除的元组放入一个特殊的逻辑表(delete表)中。
触发器的动作可以检查delete表中的数据,以确定下一步该如何处理。
3)INSERT选项为创建INSERT触发器。
INSERT触发器在对指定表中执行插入数据操作时激活,激活后将插入表中的数据拷贝并送入一个特殊的逻辑表(inserted 表)中,触发器会根据INSERT表中的值决定如何处理。
4)UPDATE选项为创建UPDATE触发器。
UPDATE触发器仅在对指定表中进行更新数据操作时激活。
UPDATE触发器激活后把将要被更新的原数据移入delete表中再将要被更新后的新数据的备份送入insert表中,UPDATE触发器对delete和inserted表进行检查,并决定如何处理。
5)NOT FOR REPLICATION 选项说明当一个复制过程在修改一个触发器表时,与该表相关联的触发器不能被执行。
触发器是一种特殊类型的存储过程,用来保证数据完整性,当对它所保护数据进行插入、修改和删除时自动激活,对改变的数据进行检查,以防止对数据进行不正确、未授权或不一致的修改。
一个触发器只适用于一个表,每个表最多只能有三个触发器,它们分别是INSERT、UPDATE和DELETE触发器。
数据库实验六报告

实验项目SQL Server 2000中数据库完整性约束触发器设置所属课程数据库原理实验目的1)熟悉通过SQL对数据进行完整性约束触发器控制。
2)完成作业的上机练习。
实验环境SQL Server 2000 window XP实验内容要求:在SQLSERVER2000中利用SQL语句完成以下操作。
1)通过SQL对表建立完整性约束。
2)通过SQL创建插入触发器。
3)通过SQL创建删除触发器。
4)通过SQL创建更新触发器实验过程1)复制生成xscj数据库的代码并运行。
2)为student表的年龄字段增加名为Checkage约束条件,限制年龄介于15到25之间。
3)为student表建立触发器Sinsert,如果student表中插入一条记录,则取消插入并提示错误。
4)为student表建立触发器Smodi,如果student表中某一学生年龄加1,则SC表中该学生的各门成绩都加15)为student表建立触发器Sdel,如果student表中某一学生删除,则SC表中该学生记录也删除。
实验结果及分析1.首先打开SQL查询分析器,复制生成xscj数据库的代码并运行实验操作步骤通过SQL Server 2000软件运行后所得截图如下:2:新建约束条件checkage:3:测试sinsert触发器:4.建立触发器Smodi:运行smodi触发器,当学好为2002151121的学生的年龄加一,sc表中,该同学的成绩加1.5:创建触发器sdel:运行sdel触发器,如图,删除学号为2002151121的在student表中的学生记录,相应的SC表中的记录也删除了。
实验心得总结通过这次的实验,我熟悉掌握了通过SQL对表建立完整性约束,了解了创建插入触发器,更加深入地学习了数据库的一些知识,充分地运用SQL软件的功能。
在为student表建立触发器Sdel,如果student表中某一学生删除,则SC表中该学生记录也删除的过程中存在着很多困难,多次运行失败,我通过查询资料以及翻阅课本知识,深入了解触发器的一些知识,对问题有了一些头绪,能够运行成功,基本解决的这个问题。
数据库实验报告(6)

数据库实验报告(6)一实验题目1.存储过程的定义和使用2。
触发器的创建和使用二实验目的1.掌握存储过程的定义、执行和调用方法。
2.掌握触发器的创建和使用。
三实验内容1.存储过程的定义和使用(1)创建存储过程查找姓李的学生的选修课成绩信息。
(2)创建一个存储过程,计算每个学生选修课的总分,并显示得分最高的三名学生的分数。
(3)创建一个存储过程以查找课程的最高分数(带有输入参数的存储过程)。
(4)创建一个存储过程来计算同学的平均分数并返回统计结果。
(带输入和输出参数的存储过程)(5)创建一个存储过程,计算选修课的数量,然后返回数字。
(6)用存储过程统计选修课,用存储值最多的学生。
(存储过程的嵌套)2.触发器的创建与使用(1)如果学分大于5,在为表格C插入新课程信息时,定义行前级别的触发学分uu触发器分,自动修改为5分。
(2)定义行后级别触发器。
当SC表的等级发生变化时,它将自动出现在等级变化表SC_uu增加日志中加一条新的纪录,该新纪录包括:操作者名称、操作日期、操作类型。
(3)建立一个delete触发器,针对于sc表,每次只能删除一条信息。
(4)创建不允许用户更改学号的更新触发器。
如果学生号被更改,将给出提示信息:学生号不允许更改。
(5)执行相应的SQL语句来触发上面定义的触发器。
(6)删除触发信用触发四实验步骤1.存储过程的定义和格式:createproc[edure]procedure_name[;number][{@parameterdata_type}[变化][=默认值][输出][with[用于复制]assql_statement[...n]创建存储过程以查找姓李的学生的选修课分数信息。
(1)创建存储过程,统计每个学生的选修课的总成绩,显示成绩最好的前3名学生成绩。
SC表的基本信息如图1所示:图表1代码:createprocp_sumscoreas从SCGroupByNo中选择Top 3Sum(成绩)作为总分execp_sumscore运行结果:命令已成功完成。
实验6 触发器逻辑功能测试及应用

实验六 触发器逻辑功能测试及应用一、实验目的:1、掌握基本RS 、JK 、D 、T 和T ′触发器的逻辑功能;2、学会验证集成触发器的逻辑功能及使用方法;3、熟悉触发器之间相互转换的方法。
二、实验原理:触发器:根据触发器的逻辑功能的不同,又可分为: 三、实验仪器与器件:实验仪器设备:D2H +型数字电路实验箱。
集成块:74LS112 74LS74 74LS04 74LS08 74LS02 74LS86 四、实验内容与步骤:1、基本RS 触发器逻辑功能的测试:S=R=0时,保持; S=0,R=1时,置0; S=1,R=0时,置1;S=R=1时,不定。
⎪⎩⎪⎨⎧=+=∙+=+101d d d d n d d n R S R S Q R S Q 或约束条件:2、JK 触发器逻辑功能测试:S=R=0时,保持; S=0,R=1时,置0; S=1,R=0,置1; S=R=1时,翻转。
n n n Q J Q +=+1电路图为:3、D 触发器逻辑功能测试: (1)异步输入端功能测试:(2)D触发器逻辑功能测试:D Q n =+14、不同类型时钟触发器间的转换: JK 转换为D 触发器:K J D ==D 转换为JK 触发器:D J =,K =JK 转换为T 触发器和T 转换为JK 触发器:T=J=KJK 转换为RS 触发和RS 转换为JK 触发器:Q nJ S = K R =五、实验体会与要求:1.要掌握RS,JK,T,D 触发器的工作条件,以及功能;2.要掌握各触发器之间的关系以及相互之间的转换;3.各触发器的特性表:同步RS 触发器的特性表(n n Q R S Q +=+1)D 触发器的特性表(D Q n =+1)T 触发器的特性表(n n Q T Q ⊕=+1)T ’触发器的特性表(n n Q Q =+1)JK 触发器的特性表(n n n Q K Q J Q +=+1)。
实验六 触发器实验报告

实验六触发器实验报告一、实验目的本次实验的主要目的是深入理解触发器的工作原理和应用,通过实际操作和观察,掌握触发器在数字电路中的功能和特性。
二、实验原理触发器是一种具有记忆功能的基本逻辑单元,能够存储一位二进制信息。
常见的触发器类型有 SR 触发器、JK 触发器、D 触发器和 T 触发器等。
以 D 触发器为例,其工作原理是在时钟脉冲的上升沿或下降沿,将输入数据D 传递到输出端Q。
在没有时钟脉冲时,输出状态保持不变。
三、实验设备与材料1、数字电路实验箱2、 74LS74 双 D 触发器芯片3、示波器4、导线若干四、实验内容与步骤1、用 74LS74 芯片搭建 D 触发器电路将芯片插入实验箱的插座中,按照芯片引脚功能连接电源、地和输入输出引脚。
使用导线将 D 输入端连接到逻辑电平开关,将时钟输入端连接到脉冲信号源,将 Q 和 Q'输出端连接到发光二极管或逻辑电平指示器。
2、测试 D 触发器的功能置 D 输入端为高电平(1),观察在时钟脉冲作用下 Q 输出端的变化。
置 D 输入端为低电平(0),再次观察时钟脉冲作用下 Q 输出端的变化。
3、观察 D 触发器的异步置位和复位功能将异步置位端(PRE)和异步复位端(CLR)分别连接到逻辑电平开关,测试在置位和复位信号作用下触发器的状态。
4、用示波器观察时钟脉冲和 Q 输出端的波形将示波器的探头分别连接到时钟脉冲输入端和 Q 输出端,调整示波器的设置,观察并记录波形。
五、实验结果与分析1、在 D 输入端为高电平时,每当时钟脉冲的上升沿到来,Q 输出端变为高电平;在D 输入端为低电平时,每当时钟脉冲的上升沿到来,Q 输出端变为低电平,验证了 D 触发器的正常功能。
2、当异步置位端(PRE)为低电平时,无论其他输入如何,Q 输出端立即变为高电平;当异步复位端(CLR)为低电平时,Q 输出端立即变为低电平,表明异步置位和复位功能有效。
3、从示波器观察到的波形可以清晰地看到时钟脉冲与 Q 输出端的关系,进一步验证了触发器的工作特性。
数据库触发器实验实训报告

一、实验背景随着信息技术的飞速发展,数据库技术在各行各业中的应用越来越广泛。
数据库触发器作为数据库管理系统的重要组成部分,具有强大的功能,能够帮助用户实现复杂的数据操作和业务逻辑。
为了提高学生对数据库触发器的理解与应用能力,我们开展了数据库触发器实验实训。
二、实验目的1. 掌握触发器的概念、作用及分类;2. 熟悉触发器的创建、修改和删除操作;3. 学会使用触发器实现业务规则和数据完整性;4. 提高数据库编程能力,为以后的实际工作打下基础。
三、实验环境1. 操作系统:Windows 102. 数据库:MySQL 5.73. 编程语言:Python四、实验内容1. 触发器的基本概念触发器是一种特殊的存储过程,它在特定事件发生时自动执行。
触发器可以分为两大类:DML触发器和DDL触发器。
DML触发器包括INSERT、UPDATE和DELETE触发器,用于在数据操作时执行特定的逻辑;DDL触发器用于在数据定义语言操作时执行特定的逻辑。
2. 触发器的创建以MySQL为例,创建触发器的语法如下:DELIMITER //CREATE TRIGGER 触发器名称BEFORE|AFTER INSERT|UPDATE|DELETE ON 表名BEGIN-- 触发器逻辑END;//DELIMITER ;例如,创建一个名为before_insert_trigger的触发器,在向bookinfo表插入数据之前执行:DELIMITER //CREATE TRIGGER before_insert_triggerBEFORE INSERT ON bookinfoFOR EACH ROWBEGINIF NEW.price > 100 THENSIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Book price should not exceed 100';END IF;END;//DELIMITER ;3. 触发器的修改修改触发器的语法与创建触发器类似,只需要使用ALTER TRIGGER语句:ALTER TRIGGER 触发器名称BEFORE|AFTER INSERT|UPDATE|DELETE ON 表名BEGIN-- 触发器逻辑END;例如,修改上述触发器,限制书籍价格不超过50元:DELIMITER //ALTER TRIGGER before_insert_triggerBEFORE INSERT ON bookinfoFOR EACH ROWBEGINIF NEW.price > 50 THENSIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Book price should not exceed 50';END IF;END;//DELIMITER ;4. 触发器的删除删除触发器的语法如下:DROP TRIGGER IF EXISTS 触发器名称;例如,删除上述触发器:DROP TRIGGER IF EXISTS before_insert_trigger;5. 触发器与存储过程的区别触发器和存储过程都是数据库编程的重要工具,但它们之间存在一些区别:(1)触发器在特定事件发生时自动执行,而存储过程需要手动调用;(2)触发器只能包含一个语句块,而存储过程可以包含多个语句块;(3)触发器不能返回结果集,而存储过程可以返回结果集。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
淮海工学院计算机工程学院实验报告书课程名:《数据库原理及应用》题目:存储过程和触发器班级:软件132学号: 2013122907姓名:孙莹莹一.目的与要求1.掌握存储过程的创建方法;2.掌握存储过程的执行、修改和删除等操作;3.掌握触发器的创建方法;4.掌握触发器的使用、修改和删除等相关内容二.实验内容基于前面建立的factory数据库,使用T-SQL语句完成如下各小题的功能:1.创建一个为worker表添加职工记录的存储过程Addworker;2.创建一个存储过程Delworker删除worker表中指定职工号的记录。
3.显示存储过程Delworker;4.删除存储过程Addworker和Delworker.三.实验步骤1 .(1)建立存储过程USE factoryGOCREATE PROCEDURE Addworker@no int=NULL,@name char(10)=NULL,@sex char(2)=NULL,@birthday datetime=NULL,@na char(2)=NULL,@wtime datetime=NULL,@depno int=NULLASIF @no IS NULL OR @name IS NULL OR @sex IS NULL OR@birthday IS NULL OR @depno IS NULLBEGINPRINT '请重新输入该职工信息!'PRINT '你必须提供职工号、姓名、性别、出生日期、部门号'RETURNENDBEGIN TRANSACTIONINSERT INTO workerVALUES(@no,@name,@sex,@birthday,@na,@wtime,@depno)IF @@error<>0BEGINROLLBACK TRANRETURNENDCOMMIT TRANSACTIONPRINT '职工'+@name+'的信息成功添加到表worker中'(2)验证存储过程USE factoryGOAddworker 20,'陈立','女','55/03/08','否','75/10/10',4GOSELECT 职工号,姓名,性别,党员否 FROM workerGO2.(1)建立存储程序USE factoryGOCREATE PROCEDURE Delworker@no int=NULLASIF @no IS NULLBEGINPRINT '必须输入职工号!'RETURNENDBEGIN TRANSACTIONDELETE FROM worker WHERE 职工号=@noIF @@error<>0BEGINROLLBACK TRANRETURNENDCOMMIT TRANSACTIONPRINT '成功删除职工号为'+CAST(@no AS CHAR(2))+'的职工记录'执行下列语句,可验证存储过程的正确性:USE factoryGODelworker 20GOSELECT 职工号,姓名,性别,党员否 FROM workerGO3.USE factoryGOEXEC sp_helptext DelworkerGO4.USE factoryGOIF EXISTS (SELECT name FROM sysobjectsWHERE name = 'Addworker' AND type ='P') DROP PROCEDURE AddworkerGOIF EXISTS (SELECT name FROM sysobjectsWHERE name = 'Delworker' AND type ='P') DROP PROCEDURE DelworkerGO5.建立触发器depart_update的程序如下:USE factoryGOIF EXISTS (SELECT name FROM sysobjectsWHERE type='TR' AND name='depart_update')DROP TRIGGER depart_updateGOCREATE TRIGGER depart_update ON departAFTER UPDATEASDECLARE @olddepno int,@newdepno intSELECT @olddepno=部门号FROM deletedSELECT @newdepno=部门号FROM inserted UPDATE workerSET 部门号=@newdepnoWHERE 部门号=@olddepnoGO执行下列语句,可验证存储过程的正确性:USE factoryGOPRINT '将部门号改为'UPDATE departSET 部门号=105WHERE 部门号=101GOSELECT 职工号,姓名,部门号FROM workerGOPRINT '将部门号改为'UPDATE departSET 部门号=101WHERE 部门号=105GOSELECT 职工号,姓名,部门号FROM workerGO6.建立触发器worker_delete的程序如下:USE factoryGOIF EXISTS(SELECT name FROM sysobjectsWHERE type='TR'AND name='worker_delete')DROP TRIGGER worker_deleteGOCREATE TRIGGER worker_delete ON workerFOR DELETEASDECLARE @no intSELECT @no=职工号FROM deletedDELETE FROM salaryWHERE职工号=@noGO执行下列语句,可验证存储过程的正确性:USE factoryGOPRINT'删除前的工资记录'SELECT*FROM salaryGODELETE FROM workerWHERE职工号=15GOPRINT'删除职工号为的职工记录后的工资记录'SELECT*FROM salaryGO7.删除触发器depart_update的程序如下:USE factoryGODROP TRIGGER depart_updateGO8.删除触发器worker_delete的程序如下:USE factoryGODROP TRIGGER worker_deleteGO四.测试数据与实验结果第1题图第2题图第3题图第5题图第6题图五.结果分析与实验体会CREATE PROCEDURE语句允许创建、编译并在MS-SQL Server上保存存储过程。
在默认情况下,只有数据库拥有者(DBO)具有对数据库的CREATE PROCEDURE访问权。
但是,DBO可执行以下形式的GRANT语句向由语句中的<username>所标识的用户ID授予CREATE PROCEDURE访问权: GRANT CREATE PROCEDURE <username>CREATE PROCEDURE语句的句法如下:CREATE PROCEDURE <procedure name> [;<version number>][{@<parameter name><data type> [VARYING][=<default value>] [OUTPUT][…,n]}][WITH {RECOMPILE|ENCRYPTION|RECOMPILE,ENCRYPTION}][FOR REPLICATION]AS <Transact-SQL statement(s)>其中:<procedure name>是存储过程的名称,名称至多可有128个字符。
<version number>允许创建多个有相同名称的存储过程。
通过在执行命令中包括版本号从而执行指定版本的存储过程,如下面的语句所示:EXEC usp_proc;2。
如果调用存储过程时没有指定版本号,DBMS将执行具有相同名称的存储过程组中最高版本号的存储过程。
通过在DROP语句中包括版本号,如DROP PROCEDURE usp_proc;2所示,可以删除特定版本号的存储过程,或者忽略版本号,如DROP PROCEDURE usp_proc从而一次删除存储过程的所有版本。
<parameter name>是可用作存储过程中的变量的参数名。
每个参数的值必须在存储过程调用中提供或者作为CREATE PROCEDURE语句的一部分设置为缺省值。
虽然参数可用作存储过程中的变量名,但参数不能用作列名、表名或是其他数据库对象的名称。
<data type>是参数的数据类型。
参数可以是任何合法的SQL数据类型(包括TEXT、NTEXT和IMAGE)或用户定义的数据类型。
如果参数是CURSOR数据类型,该参数还必须被指定为VARYING和OUTPUT。
VARYING仅对数据类型为CURSOR的参数才是合法的。
指明该参数将包括内容会变化的结果集,其内容由存储过程中的语句动态地构成。
<default value>是参数的默认值。
如果指定,则过程可在不指定参数的情况下执行。
OUTPUT指明参数在存储过程中可以变化,而且修改后的值可返回给主调过程。
…,n指明CREATE PROCEDURE语句可有多达2100个参数。
RECOMPILE每当存储过程被调用时告诉MS-SQL Server都要进行编译(也就是生成新的执行计划)。
如果没有此选项项,DBMS在执行CREATE PROCEDURE语句时编码存储过程,每次调用时都使用同一执行计划。
ENCRYPTION告诉MS-SQL Server加密SYSCOMMENTS表中存储过程条目的文本,以防止用户查看编译后的存储过程中的语句。
指定此选项还可防止存储过程被除数作为MS-SQL Server的复制过程而分开。
由于创建的触发器在条件成立时会自动被调用,可能影响后面示例的执行,所以当一个触发器不再需要时,需将其禁用,禁用trigop触发器的操作是:选中factory表节点,展开下方的触发器节点,右击trigop,在出现的快捷菜单中选择禁用命令。