数据库实验三触发器的创建修改及删除
- 格式:doc
- 大小:640.00 KB
- 文档页数:4
删除和使能触发器删除触发器:DROP TRIGGER trigger_name;当删除其他用户模式中的触发器名称,需要具有DROP ANY TRIGGER系统权限,当删除建立在数据库上的触发器时,用户需要具有ADMINISTER DATABASE TRIGGER系统权限。
此外,当删除表或视图时,建立在这些对象上的触发器也随之删除。
禁用或启用触发器数据库TRIGGER 的状态:有效状态(ENABLE):当触发事件发生时,处于有效状态的数据库触发器TRIGGER 将被触发。
无效状态(DISABLE):当触发事件发生时,处于无效状态的数据库触发器TRIGGER 将不会被触发,此时就跟没有这个数据库触发器(TRIGGER) 一样。
数据库TRIGGER的这两种状态可以互相转换。
格式为:ALTER TIGGER trigger_name [DISABLE | ENABLE ];--例:ALTER TRIGGER emp_view_delete DISABLE;ALTER TRIGGER语句一次只能改变一个触发器的状态,而ALTER TABLE语句则一次能够改变与指定表相关的所有触发器的使用状态。
格式为:ALTER TABLE [schema.]table_name {ENABLE|DISABLE} ALL TRIGGERS;--例:使表EMP 上的所有TRIGGER 失效:ALTER TABLE emp DISABLE ALL TRIGGERS;触发器和数据字典相关数据字典:USER_TRIGGERS、ALL_TRIGGERS、DBA_TRIGGERSSELECT TRIGGER_NAME, TRIGGER_TYPE, TRIGGERING_EVENT,TABLE_OWNER, BASE_OBJECT_TYPE, REFERENCING_NAMES,STATUS, ACTION_TYPEFROM user_triggers;数据库触发器的应用实例用户可以使用数据库触发器实现各种功能:复杂的审计功能;例:将EMP 表的变化情况记录到AUDIT_TABLE和AUDIT_TABLE_V ALUES中。
任务一:
1.启动DBMS服务器,视情况决定是否附加实验用数据库。
2.利用对象资源管理器,对指定数据库中的表进行数据的添加、修改和删除。
尝试去做一些违反数据库定义中的约束的操作,分析反馈操作信息,并回答思考问题。
3.在查询编辑器中,利用INSERT、DELETE、UPDA TE语句在指定的数据库的相关表中进行如下数据的添加、修改和删除。
对操作中出现的问题进行分析,并加以解决。
在已经创建好的学生选课数据库中的各表中添加样例数据,并更新“学生—课程”数据库。
(1)向学生表S中插入一行数据。
(分析插入数据的学号与已有学号相同或不同时的反馈信息)。
学号相同时:
学号不同时:
(2)根据学生表和课程表生成一个“计算机”系学生的成绩临时表CGRADE,表中包括SN、CNO、GRADE三个属性。
(3)将王玲所学的高等数学成绩改为86.0.
(4)删除成绩低于所有课程平均成绩的选课元组。
(5)设置数据修改和删除的处理策略。
(要求选课表中有S04的选课信息)a.将学生表中学号为S04的学生学号修改为S28。
b.删除学生表中学号为S28的学生信息。
查看执行操作后表SC的变化情况或不能执行操作的反馈信息,并加以分析。
数据库实验报告课程:数据库原理及应用正文:一、实验目的1.理解索引和视图的概念。
2.掌握索引的使用方法。
3.掌握视图的定义和使用方法。
4.理解存储过程的概念,掌握存储过程的使用方法。
5.学习触发器的使用,体会触发器执行的时机,加深对触发器功能和作用的理解。
6.理解SQL Server2000验证用户身份的过程,掌握设置身份验证模式的方法。
7.理解登陆账号的概念,掌握混合认证模式下登陆账号的建立与取消方法。
8.掌握混合认证模式下数据库用户的建立与取消。
9.掌握数据库用户权限的设置方法。
10.理解角色的概念,掌握管理角色技术。
11.学会配制ODBC数据源。
了解使用ODBC来进行数据库应用程序设计,通过ODBC接口访问数据库并对数据库进行操作。
学习在Visual Basic中使用ADO控件访问后台的SQL Server数据库。
二、实验内容1.建立索引。
对JWGL数据库的学生选课表SC建立索引,要求按照Cno升序、Grade降序建立一个名为SC_ind的索引。
USE JWGLIF EXISTS(SELECT name FROM sysindexes WHERE name = 'SC_ind')DROP INDEX SC.SC_ind;GOUSE JWGLCREATE INDEX SC_ind ON SC (Cno,Grade DESC);2.视图的定义和操作,(1)在JWGL数据库里,完成第三章例3.54~例3.61例题中视图的定义和视图上的查询、更新操作。
(2)在Market数据库中,完成第三章习题11中(1)中建立视图的操作,然后在视图上完成第三章习题11(2)的查询操作。
3.在数据库JWGL中,完成第四章例1,例3~7中例题的创建存储过程的操作,并使用EXEC语句调用这些存储过程执行,观察他们的执行结果。
4.在Market数据库中,完成第四章习题5中(1)~(4)创建存储过程的操作。
一、实验背景随着信息技术的飞速发展,数据库技术在各行各业中的应用越来越广泛。
数据库触发器作为数据库管理系统的重要组成部分,具有强大的功能,能够帮助用户实现复杂的数据操作和业务逻辑。
为了提高学生对数据库触发器的理解与应用能力,我们开展了数据库触发器实验实训。
二、实验目的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)触发器不能返回结果集,而存储过程可以返回结果集。
数据库头歌实训触发器的创建和使用数据库头歌是一款广泛应用于企业和个人的开源数据库管理系统软件,其功能强大并且易于使用。
在实际应用中,触发器是数据库头歌中一个重要的功能,可以在特定的数据库操作时自动执行一系列的动作,对数据库进行监控和管理。
本文将介绍数据库头歌实训触发器的创建和使用方法,帮助读者更好地理解和应用触发器功能。
一、触发器的概念和作用触发器是一种特殊的存储过程,它在特定的数据库操作(如插入、更新、删除)发生时自动触发执行。
触发器可以用于监控数据库的变化,执行一些自定义的操作,或者实现数据的约束和一致性。
在实际应用中,触发器常常用于记录数据变更历史、更新相关表的数据、进行数据校验等方面。
二、创建触发器的语法和步骤在数据库头歌中,创建触发器需要遵循一定的语法和步骤,下面是创建触发器的基本语法:CREATE TRIGGER trigger_nameBEFORE/AFTER INSERT/UPDATE/DELETE ON table_nameFOR EACH ROWBEGIN-- 触发器逻辑代码END;其中,trigger_name是触发器的名称,table_name是触发器所属的表,BEFORE/AFTER指定触发器在数据操作之前或之后执行,INSERT/UPDATE/DELETE指定触发器监控的数据库操作类型,FOR EACH ROW表示每行数据发生操作时触发。
触发器逻辑代码可以是一系列的SQL语句,用于处理触发器监控的数据库操作。
创建触发器的步骤如下:1. 连接数据库头歌,选择要创建触发器的数据库。
2. 使用CREATE TRIGGER语句创建触发器,指定触发器的名称、所属表、触发时机和逻辑代码。
3. 执行CREATE TRIGGER语句,成功创建触发器。
三、触发器的使用示例下面通过一个具体的示例来演示数据库头歌实训触发器的创建和使用。
假设有一个学生表(student)和一个成绩表(score),我们希望在学生表插入新记录时自动在成绩表中插入一条初始成绩记录,可以通过触发器来实现这一功能。
第25讲触发器的类型,建立,修改,删除,应用目的:1.掌握触发器的概念,类型,作用2.掌握各种类型触发器的创建,修改,删除3.掌握编写复杂触发器的应用。
授课内容:1.触发器概念触发器是一种特殊的PL/SQL程序块,它不用我们显式调用它,不像存储过程,函数,需要我们显式调用它,当某个条件或事件发生时,触发器自动运行。
2.创建,修改,删除触发器权限创建触发器,要求用户必须有更改表的权限,ALTER ANY TABLE权限,以及CREATE ANY TRIGGER权限,为了在其他方案中创建触发器,用户必须具有CREA TE ANY TRIGGER权限。
修改触发器必须具有ALTER ANY TRIGGER权限。
3.触发器类型:1)行级触发器(ROW LEVEL trigger):最常用的触发器。
对DML语句中影响的每一行执行一次。
在create trigger 语句中使用FOR EACH ROW子句建立行级触发器。
2)语句级触发器(Statement Level Trigger)DML语句运行才执行一次,语句级触发器是使用create trigger创建时默认的触发器类型。
语句级触发器一般不常用于与数据相关的活动。
通常用于强制实施一个能在一个表上执行各种操作的额外安全措施。
如:一条insert 语句在EMP表上插入了100条记录,但这表的语句级触发器只执行一次。
3)BEFORE触发器在insert, update, delete 之前运行。
可以引用DML影响记录的旧值和新值。
旧值表示在DML语句执行之前的数据。
新值表示在DML语句更新后的表的数据。
旧值用:OLD.字段名新值用:NEW.字段名4)AFTER 触发器:在insert, update, delete 语句之后运行。
可以引用DML影响记录的旧值和新值。
旧值用:OLD.字段名新值用:NEW.字段名在审计应用程序中经常使用AFTER行级触发器,因为直到行被修改才触发这些触发器。
存储过程与触发器实验报告本实验旨在探究存储过程与触发器的概念、作用、使用范围和创建过程,并且通过编写相关的示例代码来展示它们的实际应用。
一、实验原理1. 存储过程存储过程是一组预定义好的 SQL 语句,可以重复使用并且可以直接被调用。
它类似于程序中的函数,可以接受参数、返回值、流程控制等。
2. 触发器触发器是与数据库表相关的事件响应机制,可以在数据库表上定义一些触发条件,当满足这些条件时就会触发执行一些操作,比如插入、更新或删除数据。
二、实验步骤1. 存储过程的创建与使用(1)创建一个用于统计某个用户的订单数量的存储过程。
```DELIMITER //CREATE PROCEDURE `getOrderCount`(IN p_userid INT, OUTp_count INT)BEGINSELECT COUNT(*) INTO p_count FROM orders WHERE user_id = p_userid;END//DELIMITER ;```(2)调用这个存储过程,并输出结果。
```CALL getOrderCount(123, @count);SELECT @count AS 'order_count';```2. 触发器的创建与使用(1)创建一个在用户表中插入新记录时自动生成一个账户记录的触发器。
```DELIMITER //CREATE TRIGGER `insert_user_account` AFTER INSERT ON `users` FOR EACH ROWBEGININSERT INTO accounts (user_id, balance) VALUES (NEW.id, 0);END//DELIMITER ;```(2)在用户表中插入一条新记录,触发器会自动执行并在账户表中生成一条新记录。
```INSERT INTO users (name, email) VALUES ('Alice','***************');SELECT * FROM accounts WHERE user_id =LAST_INSERT_ID();```三、实验结论通过实验我们发现,存储过程可以将一些常用的 SQL 语句封装为一个可以重复调用的函数,使得程序更加简洁和高效。
数据库的触发器与删除清空的说明书一、触发器的概念和作用触发器是数据库中的一种特殊的存储过程,它可以在特定的数据库操作(如插入、更新、删除)前后自动执行指定的代码逻辑。
触发器广泛应用于保护数据完整性、实现业务规则和触发复杂的业务逻辑等方面。
本说明书将详细介绍数据库触发器的概念、用法和删除清空等内容,以便用户能够正确地使用触发器。
二、触发器的创建与使用方法1. 创建触发器:在数据库中,可以使用CREATE TRIGGER语句来创建触发器。
触发器包括触发器的名称、触发事件(如INSERT、UPDATE、DELETE)、触发时机(BEFORE或AFTER)以及触发的操作等。
示例代码:CREATE TRIGGER trg_ExampleAFTER INSERT ON table_nameFOR EACH ROWBEGIN-- 触发器的具体操作逻辑END;2. 触发器的使用:触发器可以在特定的数据库操作前后触发相应的操作,常见的触发操作包括INSERT、UPDATE和DELETE。
触发器通过使用NEW和OLD关键字来访问被触发的行的数据。
可以在触发器中编写SQL语句实现对其他表的操作,例如进行数据插入、更新或删除等操作。
示例代码:CREATE TRIGGER trg_ExampleAFTER INSERT ON table_nameFOR EACH ROWBEGININSERT INTO other_table (column1, column2)VALUES (NEW.column1, NEW.column2);END;三、触发器的删除与清空1. 删除触发器:当用户不再需要某个触发器时,可以使用DROP TRIGGER语句进行删除。
示例代码:DROP TRIGGER trg_Example;2. 清空触发器:在某些情况下,用户可能需要清空数据库中所有的触发器。
为了实现这一目的,可以使用以下步骤:步骤一:查询数据库中的所有触发器。
一、创建数据库命令CREATE DATABASE我们回顾一下前面介绍的使用图形界面创建数据库时需要进行的一些设置。
首先数据库创建时必不可少的参数是数据库的名称;然后是数据库中数据文件和日志文件的位置和名称的决定(这个可以取默认值,还记得默认位置和默认名称是什么吗?);还有文件的初始大小、最大大小、文件增长率等内容,但这些也都可以不设置,取其默认值即可。
下面我们从易到难逐步介绍使用CREATE DATABASE命令创建数据库的方法。
1.最简单的CREATE DATABASE命令格式CREATE DATABASE database_name在上面的命令格式中CREATE DATABASE是创建数据库的命令关键字,是不可以更改的,而database_name是需要用户给定的数据库名称。
例1:创建用户数据库mytestdatabase1CREATE DATABASE mytestdatabase1在SQL Server Management Studio主界面中执行此查询命令,看到显示“命令已成功完成”的消息时,即创建了用户数据库mytestdatabase1。
我们使用命令创建的数据库其数据文件和日志文件的名称和位置及其它参数都取默认值,现在有两个问题:其一是请你找到这些文件,其二是如果想改变数据文件和日志文件的名称或存放位置,应该如何写命令呢?请看下面内容。
2.指定数据库文件名称和位置的CREATE DATABASE命令格式CREATE DATABASE database_nameON PRIMARY( --这里的关键字PRIMARY可省略,用于主文件的定义NAME=logical_file_name, --设置主数据文件的逻辑名称FILENAME=os_file_name --设置主数据文件的操作系统名称)LOG ON ( --LOG ON用于日志文件的定义NAME=logical_file_name, --设置日志文件的逻辑名称FILENAME=os_file_name --设置日志文件的操作系统名称)前面我们讲到在SQL Server中建立好一个数据库至少需要有两个文件,一个是主要数据文件(简称主数据文件),另一个是日志文件,缺一不可。
实验三索引和视图的创建、修改和删除1 实验目的
1.熟悉数据库的交互式SQL工具中数据定义的基本操作。
2.熟悉通过SQL对数据库进行操作:建立、删除索引,建立和更新视图。
2 实验工具SQL Server2005
利用SQL Server2005及其交互式查询工具来熟悉SQL中数据定义的基本操作。
3 实验内容和要求
1. 在前面实验中建立的数据库进行实验所要求的各种操作。
2. 熟悉索引的创建和删除。
熟悉视图的创建和更新。
3. 根据要求认真填写实验报告,记录所有的实验用例。
4 实验步骤
在SQL查询分析器利用CREATE、DROP语句创建和删除视图、索引。
在SQL查询分析器利用SELECT、INSERT、UPDATE、DELETE语句查询、更新视图。
步骤:
1、利用查询分析器用CREATE语句建立索引
注:聚簇索引的关键字是clustered
2、利用查询分析器用DROP语句删除索引。
3、利用查询分析器用CREATE语句建立视图
4、利用查询分析器SELECT语句查询视图。
5、利用查询分析器用INSERT、UPDATE、DELETE语句更新视图
6、利用查询分析器用DROP语句删除视图
7、上机练习p98-3、5、8,p117-4、6。
昆明理工大学信息工程与自动化学院学生实验报告( 2010 —2011 学年第二学期)课程名称:数据库高级应用开课实验室:计算中心208 2011年 5月 17日年级、专业、班学号姓名成绩实验项目名称触发器的创建、修改及删除指导教师教师评语教师签名:年月日一、实验目的、要求目的:了解触发器的功能掌握触发器的使用方法要求:实现简单触发器的使用二、实验所用仪器、材料微型计算机一台SQL server 2008三、实验原理触发器与存储过程非常相似,触发器也是SQL 语句集,两者惟一的区别是触发器不能用EXECUTE 语句调用,而是在用户执行Transact-SQL 语句时自动触发(激活)执行。
触发器是一个在修改指定表中的数据时执行的存储过程。
经常通过创建触发器来强制实现不同表中的逻辑相关数据的引用完整性或者一致性。
由于用户不能绕过触发器,所以可以用它来强制实施复杂的业务规则,以此确保数据的完整性。
触发器不同于存储过程。
触发器主要是通过事件进行触发而被执行的,而存储过程可以通过存储过程名字而被直接调用。
当对某一表进行诸如UPDATE、INSERT、DELETE 这些操作时,SQL Server 就会自动执行触发器所定义的SQL 语句,从而确保对数据的处理必须符合由这些SQL 语句所定义的规则。
四、实验过程及数据记录创建触发器BB(修改表S中的数据时SC中的数据也同时修改了)CREA TE TRIGGER BB ON S FOR UPDA TE ASIF UPDA TE(S#)BEGINUPDA TE SC SET SC.S#=A.S#FROMINSERTED A,DELETED BWHERE SC.S#=B.S#END查看表SC的数据SELECT*FROM SCWHERE S#='200510405101'修改表S中的数据UPDA TE SSET S#='000000000000'查看表SC中的数据(验证触发器的效果)SELECT*FROM SCWHERE S#='000000000000'CREA TE TRIGGER AA ON S FOR DELETE ASDELETE FROM SC WHERE S#IN(SELECT S#FROM S)删除触发器BBDROP TRIGGER BB五、实验总结触发器的作用触发器的主要作用就是其能够实现由主键和外键所不能保证的复杂的参照完整性和数据的一致性。
实验主要任务:导入学生成绩数据库,并建立相关表的关系,对数据库实施如下操作:一、利用SQL Server管理控制台创建DML触发器中的INSERT触发器的后(AFTER)触发器1. 利用SQL-SERVER管理控制台:创建一个INSERT触发器“TR_Course_Insert”,当在课程表中插入一条新记录时,触发该触发器,并给出“你插入了一条新的课程记录!”的提示信息。
2.创建了TR_Course_Insert触发器后,查看向课程表中插入数据时,此触发器所完成的功能。
二、使用Transact-SQL语句创建DML的后(FOR、AFTER)触发器(一)实现检查约束3. 创建一个AFTER触发器,要求实现以下功能:在成绩表上创建一个插入、更新类型的触发器TR_ScoreCheck,当在成绩字段中插入或修改考试分数后,触发该触发器,检查分数是否在0-100之间。
create trigger TR_ScoreCheckon成绩for insert,updateasif(select成绩from inserted)between 0 and 100beginprint'你成功的对成绩表插入(更新)了一条记录'endelsebeginprint'(插入)更新的成绩数据错误'rollback transactionend在创建了TR_ScoreCheck触发器之后,在查询窗口中输入以下SQL语句验证:(独立完成:4.创建一个AFTER触发器,要求实现以下功能:在2003学生名单表上创建一个插入、更新类型的触发器TR_Sex_Check,当在性别字段中插入或修改性别后,触发该触发器,检查性别是否是‘男’或‘女’,并验证)set ANSI_NULLS ONset QUOTED_IDENTIFIER ONgoALTER trigger [TR_Sex_Check]on [dbo].[学生名单]for insert,updateasif(select性别from inserted)in('男','女')beginprint'插入(更新)数据'endelsebeginprint'插入或更新的性别错误'rollback transactionend(二)实现层叠修改5.创建一个AFTER触发器,要求如下:在学生表上创建一个删除类型的触发器TR_Stu_Delete,当在学生表中删除某一条记录后,触发该触发器,在成绩表中删除与此学号对应的记录。
数据库原理实验指导书湖南工程学院计算机科学与技术系2010年8月数据库原理实验报告(格式) 实验名称评分实验日期年月日指导教师姓名专业班级学号一、实验目的二、实验内容与步骤三、实验结果四、程序调试及问题分析六、实验收获及体会实验一创建、修改数据库和表结构一、实验目的:掌握建立一个数据库表结构的方法和步骤,了解数据库表的基本组成。
二、实验内容:基本表的创建和修改。
三、实验要求:(必做)硬件:Intel Pentium 120或以上级别的CPU,大于16MB的内存。
软件:Windows 95/98/2000操作系统,关系数据库管理系统SQL SERVER 2000。
学时:2学时四、实验步骤:1、用create建立教学数据库的五个基本表:(1)学生表(学号,姓名,性别,年龄),student((Sno,sname,ssex,sage) ;(2)课程表(课程号,课程名,学分),Course (Cno, Cname, credit) ;(3)选课表(学号,课程号,成绩),SC (Sno,, Cno, grade ) ;(4) 教师表(教师号,姓名,性别,出生年月,系部,职称,地址),T(Tno,Tname,ssex,birthday,dept,title,address) ;(5) 工资表(教师号,基本工资,职务工资,合计),Salary(Tno,jbgz,zwgz,hj);2、用alter修改基本表(1)在已存在的学生表student中增加一个sdept(系)的新的属性列;(2)将学生表student中sname属性列的数据类型修改为变长字符串varchar(10)。
3、建立一个临时表,然后将其删除实验二建立与删除索引一、实验目的:了解建立索引的目的,掌握建立索引与删除索引,掌握创建、修改、删除约束。
二、实验内容:建立聚簇索引、非聚簇索引、唯一索引、复合索引,删除索引,创建、修改、删除约束力。
三、实验要求:(必做)硬件:Intel Pentium 120或以上级别的CPU,大于16MB的内存。
数据库触发器实验创建基于表的触发器。
--删除已经存在的表T_TRIG。
DROP TABLE IF EXISTS T_TRIG;--删除已经存在的表T_TRIG_LOG。
DROP TABLE IF EXISTS T_TRIG_LOG;--删除已经存在的序列TRIG_LOG_SEQ。
DROP SEQUENCE IF EXISTS TRIG_LOG_SEQ;--删除已经存在的触发器TRIG_AFTER_INSERT。
DROP TRIGGER IF EXISTS TRIG_AFTER_INSERT;--删除已经存在的触发器TRIG_BEFORE_INSERT。
DROP TRIGGER IF EXISTS TRIG_BEFORE_INSERT;--创建表T_TRIG。
CREATE TABLE T_TRIG (ID INT, CREATE_DATE TIMESTAMP);--创建表T_TRIG_LOG。
CREATE TABLE T_TRIG_LOG (LOG_SEQ INT,LOG_DESC VARCHAR(30), CREATE_DATE TIMESTAMP);--创建序列TRIG_LOG_SEQ。
CREATE SEQUENCE TRIG_LOG_SEQ START WITH 1 INCREMENT BY 1;CREATE OR REPLACE TRIGGER TRIG_AFTER_INSERT AFTER INSERT ON T_TRIGBEGININSERT INTO T_TRIG_LOG VALUES(TRIG_LOG_SEQ.NEXTVAL,'after insert',systimestamp); END;/--创建一个触发器,在往T_TRIG表中INSERT一条记录之前,往T_TRIG_LOG中写一条描述为"beforeinsert"记录。
CREATE OR REPLACE TRIGGER TRIG_BEFORE_INSERT BEFORE INSERT ON T_TRIGBEGININSERT INTO T_TRIG_LOG VALUES(TRIG_LOG_SEQ.NEXTVAL,'before insert',systimestamp); END;/--往T_TRIG表中INSERT一条记录。
触发器的创建、修改和删除⼀﹕触发器是⼀种特殊的存储过程﹐它不能被显式地调⽤﹐⽽是在往表中插⼊记录﹑更新记录或者删除记录时被⾃动地激活。
所以触发器可以⽤来实现对表实施复杂的完整性约`束。
⼆﹕ SQL Server为每个触发器都创建了两个专⽤表﹕Inserted表和Deleted表。
这两个表由系统来维护﹐它们存在于内存中⽽不是在数据库中。
这两个表的结构总是与被该触发器作⽤的表的结构相同。
触发器执⾏完成后﹐与该触发器相关的这两个表也被删除。
Deleted表存放由于执⾏Delete或Update语句⽽要从表中删除的所有⾏。
Inserted表存放由于执⾏Insert或Update语句⽽要向表中插⼊的所有⾏。
三﹕Instead of 和 After触发器SQL Server2000提供了两种触发器﹕Instead of 和After 触发器。
这两种触发器的差别在于他们被激活的同﹕Instead of触发器⽤于替代引起触发器执⾏的T-SQL语句。
除表之外﹐Instead of 触发器也可以⽤于视图﹐⽤来扩展视图可以⽀持的更新操作。
After触发器在⼀个Insert,Update或Deleted语句之后执⾏﹐进⾏约束检查等动作都在After触发器被激活之前发⽣。
After触发器只能⽤于表。
⼀个表或视图的每⼀个修改动作(insert,update和delete)都可以有⼀个instead of 触发器﹐⼀个表的每个修改动作都可以有多个After触发器。
四﹕触发器的执⾏过程如果⼀个Insert﹑update或者delete语句违反了约束﹐那⼳After触发器不会执⾏﹐因为对约束的检查是在After触发器被激动之前发⽣的。
所以After触发器不能超越约束。
Instead of 触发器可以取代激发它的操作来执⾏。
它在Inserted表和Deleted表刚刚建⽴﹐其它任何操作还没有发⽣时被执⾏。
因为Instead of 触发器在约束之前执⾏﹐所以它可以对约束进⾏⼀些预处理。
数据库trigger语句数据库触发器(Trigger)是一种在数据库中自动执行的存储过程,它在数据库表的特定事件(如插入、更新或删除数据)发生时被触发。
触发器可以用于实现一些复杂的业务逻辑和数据完整性约束,提高数据库的可靠性和安全性。
下面列举了十个常用的数据库触发器语句,以及它们的应用场景和注意事项。
1. 插入触发器当向某个表中插入新的数据时,可以通过插入触发器对数据进行自动处理。
例如,当插入用户表中的数据时,可以使用插入触发器自动为新用户生成一个唯一的用户ID,并设置默认的用户权限。
```sqlCREATE TRIGGER insert_triggerAFTER INSERT ON usersFOR EACH ROWBEGINSET er_id = UUID();SET NEW.permission = 'default';END;```2. 更新触发器当某个表中的数据发生更新时,可以通过更新触发器对数据进行自动处理。
例如,当更新订单表中的数据时,可以使用更新触发器自动计算订单的总金额,并更新相应的统计信息。
```sqlCREATE TRIGGER update_triggerAFTER UPDATE ON ordersFOR EACH ROWBEGINUPDATE statistics SET total_amount = total_amount - OLD.amount + NEW.amount;END;```3. 删除触发器当从某个表中删除数据时,可以通过删除触发器对数据进行自动处理。
例如,当删除商品表中的数据时,可以使用删除触发器自动将该商品从购物车中移除。
```sqlCREATE TRIGGER delete_triggerAFTER DELETE ON productsFOR EACH ROWBEGINDELETE FROM carts WHERE product_id = OLD.product_id; END;```4. 数据完整性触发器触发器可以用于实现数据完整性约束,保证数据库中的数据符合特定的规则。
昆明理工大学信息工程与自动化学院学生实验报告
( 2010 —2011 学年第二学期)
课程名称:数据库高级应用开课实验室:计算中心208 2011年 5月 17日
一、实验目的、要求
目的:了解触发器的功能
掌握触发器的使用方法
要求:实现简单触发器的使用
二、实验所用仪器、材料
微型计算机一台
SQL server 2008
三、实验原理
触发器与存储过程非常相似,触发器也是SQL 语句集,两者惟一的区别是触发器不能用EXECUTE 语句调用,而是在用户执行Transact-SQL 语句时自动触发(激活)执行。
触发器是一个在修改指定表中的数据时执行的存储过程。
经常通过创建触发器来强制实现不同表中的逻辑相关数据的引用完整性或者一致性。
由于用户不能绕过触发器,所以可以用它来强制实施复杂的业务规则,以此确保数据的完整性。
触发器不同于存储过程。
触发器主要是通过事件进行触发而被执行的,而存储过程可以通过存储过程名字而被直接调用。
当对某一表进行诸如UPDATE、INSERT、DELETE 这些操作时,SQL Server 就会自动执行触发
器所定义的SQL 语句,从而确保对数据的处理必须符合由这些SQL 语句所定义的规则。
四、实验过程及数据记录
创建触发器BB(修改表S中的数据时SC中的数据也同时修改了)
CREATE TRIGGER BB ON S FOR UPDATE AS
IF UPDATE(S#)
BEGIN
UPDA TE SC SET SC.S#=A.S#FROM
INSERTED A,DELETED B
WHERE SC.S#=B.S#
END
查看表SC的数据
SELECT*FROM SC
WHERE S#='200510405101'
修改表S中的数据
UPDA TE S
SET S#='000000000000'
查看表SC中的数据(验证触发器的效果)
SELECT*FROM SC
WHERE S#='000000000000'
CREATE TRIGGER AA ON S FOR DELETE AS
DELETE FROM SC WHERE S#IN
(SELECT S#FROM S)
删除触发器BB
DROP TRIGGER BB
五、实验总结
触发器的作用
触发器的主要作用就是其能够实现由主键和外键所不能保证的复杂的参照完整性和数据的一致性。
它能够对数据库中的相关表进行级联修改,强制比CHECK 约束更复杂的数据完整性,并自定义错误消息,维护非规范化数据以及比较数据修改前后的状态。
与CHECK 约束不同,触发器可以引用其他表中的列。
在下列情况下,使用触发器将强制实现复杂的引用完整性: 强制数据库间的引用完整性。
创建多行触发器,当插入、更新或者删除多行数
据时,必须编写一个处理多行数据的触发器。
执行级联更新或级联删除这样的动作。
级联修改数据库中所有相关表。
撤销或者回滚违反引用完整性的操作,防止非法修改数据。
与存储过程的区别
触发器与存储过程主要的区别在于触发器的运行方式。
存储过程必须由用户、应用程序或者触发器来显示式地调用并执行,而触发器是当特定事件出现的时候,自动执行或者激活的,与连接到数据库中的用户或者应用程序无关。
当一行被插入、更新或者从表中删除时触发器才运行,同时这还取决于触发器是怎样创建的。
在数据修改时,触发器是强制业务规则的一种很有效的方法。
一个表最多有三种不同类型的触发器,当UPDATE 发生时使用一个触发器;DELETE 发生时使用一个触发器;INSERT 发生时使用一个触发器。