实验八使用触发器实现数据完整性
实验八使用触发器实现数据完整性
一、实验目的
使学生用触发器实现数据完整性的重要性,掌握用触发器实现数据完整性的方法,
掌握用触发器实现参照完整性的方法,并理解触发器与约束的不同。
二、实验内容
(1)为表建立触发器,实现域完整性,并激活触发器进行验证。
(2)为表建立级联的触发器,实现参照完整性,并激活触发器进行验证
(3)比较约束与触发器的执行顺序。
三、实验指导
实验 8.1 创建 JXGL数据库的表 S 的 INSERT触发器材 tri_INSERT_S,插入年龄在线 15 到 30 之间的记录。
实验 8.2 创建 JXGL 数据库的表 S 的 DELETE 触发器 tgr_s_delete, 当删除 S 表中的记录时触发该触发器
DELETE 触发器会在删除数据的时候主,将刚才删除的数据保存在
下面删除表S 中的记录:
DELETED表中。
实验 8.3 在数据库 JXGL中有 3 个表,即 S、SC和 C,其中,表 S 连接。
如果要删除表 S 中的记录,需要创建触发器,先删除
SC的字段 sno 作为外键与表SC中与要删除记录级联的所
有记录,再删除表S 中的记录。
实验 8.4 为学生表 S创建一个 UPDATE 触发器,当更新了某同学的姓名时,就激活该触发器,并使用 PRINT 语句返回一个提示信息。
deleted表中,将更新后的数据保UPDATE 触发器会在更新数据后,将更新前的数据保存在
存在 inserted 表中。
实验 8.5触发器中的其它操作。
(1)触发器中常用的消息函数raiserror() 的应用。
(2)禁用、启用触发器。
(3)查询创建的触发器的信息。
(4)查看触发器的触发事件。
(5)查看创建触发器信息语句。
存储过程触发器和数据完整性课件
触发器应用案例
总结词
自动、高效、保证数据一致性
详细描述
触发器是一种自动执行的数据完整性束缚机制,可以在数据库中实现数据一致性的保证。当数据库中 产生插入、更新或删除操作时,触发器会自动触发并执行相关的操作,以保证数据的一致性和完整性 。同时,触发器还可以提高数据库的性能和响应速度。
数据完整性应用案例
触发器通常用于在数据库中维护数据 完整性,通过监控对表执行的更改操 作,并采取相应的措施来确保数据的 准确性和一致性。
触发器类型
01
02
03
04
根据事件类型,触发器可以分 为插入触发器、删除触发器和
更新触发器。
插入触发器:当在表中插入新 记录时触发。
删除触发器:当从表中删除记 录时触发。
更新触发器:当修改表中记录 的数据时触发。
触发器与数据完整性
REPORTING
触发器对数据完整性的影响
触发器可以用于禁止对数据库 的非法修改,从而维护数据的 完整性。
触发器可以用于在数据修改时 自动进行一些附加操作,例如 记录日志或计算衍生值。
触发器可以用于强制执行一些 业务规则,例如检查新插入的 数据是否符合特定的条件。
如何通过触发器实现数据完整性
感谢观看
REPORTING
加灵活地实现自动化的数据处理操作。 • 在保护数据完整性和安全性方面,存储过程和触发器都可以发挥重要作用。通过使用参数化查询、束缚、校验
等机制,可以有效地防止SQL注入攻击和数据的不完整性和错误。同时,使用日志和特殊处理机制可以更好地 记录操作日志和特殊信息,以便于后期审计和故障排查。
PART 06
由用户创建,根据特定业 务需求编写,用于执行自 定义的业务逻辑。
数据库实现数据完整性
限制输入到指定列的值只能为某些特定值 语法: [CONSTRAINT 约束名] CHECK (逻辑表达式) 两种强制域完整性的方法:CHECK 约束和规则 CHECK 约束定义了一个表达式,若数据修改语句使 得表达式值为 FALSE 的话,将拒绝语句执行 规则的功能和 CHECK 约束基本相同,除了语法不同, 能力稍弱。 规则可定义一次,然后对多个列分别绑定;而 CHECK 约束则需要对每个列定义。但 CHECK 约束 的功能略强一些(例如引用同行中其他列的值和调用 系统函数等)
创建CHECK 约束
在创建SC表时定义CHECK约束 Create Table SC ( sno char(5) not null, cno char(1) not null,
列级CHECK约束
grade decimal(4,1) check(grade>=0 and grade<=100),
primary key (sno,cno));
Copyright@2008
20
创建CHECK 约束
Create Table SC ( sno char(5) not null, cno char(1) not null, grade decimal(4,1), primary key (sno,cno), check(grade>=0 and grade<=100));
CREATE TABLE sc1 ( ……….,
约束名
constraint PK_SC PRIMARY KEY(sno,cno));
Copyright@2008 13
删除和添加主键
删除表上已定义的主键
ALTER TABLE SC1 DROP CONSTRAINT PK_SC;
使用约束和触发器实现数据完整性
嵌套触发器工作方式
1 INSERT、UPDATE 或 DELETE 语句
2
触发器在另一个表上执行 INSERT、UPDATE 或 DELETE…
3 …依次继续…
递归触发器的注意事项
默认禁用 - 若要启用: • ALTER DATABASE AdventureWorks2008 SET RECURSIVE_TRIGGERS ON
键约束
主键约束:
• 每个表一个 PRIMARY KEY – 基于一列或多列
• 值必须唯一 – 不允许 NULL 值
外键约束:
CREATE TABLE [HumanResources].[Department] (… CONSTRAINT [PK_Department_DepartmentID] PRIMARY KEY CLUSTERED ([DepartmentID] ASC) WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY])
[Sales].[Customer] ([CustomerID])
其他约束
DEFAULT CHECK UNIQUE
• 定义未指定列值时应取的列值 • 每列只有一个 DEFAULT • 允许某些系统函数 • 限制可输入列的值 • 每列允许多个 CHECK 约束 • 可引用同表中的列,无子查询 • 确保列中的每个值都是唯一的 • 唯一列中只允许一个 NULL 值 • 可包含一列或多列
机制 数据类型 规则 默认值 约束 触发器
说明 定义可存储在列中的数据的类型 定义可插入列中的可接受值 定义未指定列值时应取的列值 定义数据库引擎如何强制实施数据完整性 定义在修改表时自动执行的代码
第 2 节:实现约束
• 约束 • 键约束 • 其他约束 • 级联引用完整性 • 约束检查注意事项 • 演示:创建约束
实验8 数据完整性实验
实验8 数据完整性实验(4学时)1.实验目的本实验的目的是通过实验使学生加深对数据完整性的理解,学会创建和使用触发器。
2.实验内容本实验的内容为:使用SQL设计触发器,通过SQL Server企业管理器定义它们。
1.具体完成下面例题:利用触发器来保证学生选课库中选课表的参照完整性,以维护其外码与参照表中的主码一致。
CREATE TRIGGER SC_inserted ON 选课FOR INSERTAS IF(SELECT COUNT(*)FROM 学生,inserted,课程WHERE 学生.学号= inserted.学号AND inserted.课程号= 课程.课程号)=0 ROLLBACK TRANSACTION代码:截图:2.把课件第5章中卷烟数据库及其触发器的例子在Sql server中完成。
建立卷烟库存表代码:建立卷烟库存表截图:建立卷烟销售表代码:建立卷烟销售表截图:创建触发器[T_INSERT_卷烟库存表]代码:创建触发器[T_INSERT_卷烟库存表]截图:针对[卷烟库存表],插入测试数据:创建触发器[T_INSERT_卷烟销售表]代码:输入数据3.创建一个规则,使成绩大于等于零。
并将其绑定到成绩列上。
规则代码:规则截图:绑定代码:绑定截图:4.创建一个默认值,并绑定到学分列上,使学分默认为4个学分。
默认值代码:默认值截图:绑定代码:绑定截图:5.建立一个update触发器,当更新sc表中的score列时,触发器检查成绩是否提高10%。
如果成绩超过了10%,将以ROLLBACK语句复原触发器和调用触发器语句,并打印“成绩升幅太大,更新失败!”,否则,打印“成绩更新成功!”。
代码:截图:检验:3.实验步骤1、在企业管理器中创建触发器1)在企业管理器中,由服务器开始逐步扩展到触发器所属表的数据库(本例为学生选课数据库),打开表文件夹,在表窗口中用鼠标右击触发器所属的表(本例为选课表)。
太原理工大学 数据库系统概论 实验报告 数据的完整性
本科实验报告课程名称:数据库系统原理B 实验项目:数据的完整性实验地点:专业班级:学号:学生姓名:指导教师:201 年月日一目的与要求(1)了解SQL Serer数据库系统中数据完整性控制的基本方法(2)熟练掌握常用CREATE 或ALTER 在创建或修改表时设置约束(3)了解触发器的机制和使用(4)验证数据库系统数据完整性控制二实验设备与环境使用SQL Server数据库管理系统提供的SSMS和查询编辑器三实验内容、实验记录及实验结果与分析结合ST数据库中的各个表,设置相关的约束,要求包括主键约束、外键约束、唯一约束、检查约束、非空约束等,掌握各约束的定义方法。
设置一个触发器,实现学生选课总学分的完整性控制,了解触发器的工作机制。
设计一些示例数据,验证完整性检查机制。
要求包括如下方面的内容:1.创建基本表及约束Student表Course表SC表如下图所示表创建成功:2.插入数据(1)插入学生信息到Student表(2).插入课程信息到Course表(3)插入到SC表(4)检查插入表中的数据二、检查完整性约束1.检查主键约束(1)INSERT INTO Student VALUES('','李斌','男',20,'CS','1001',0) INSERT INTO Student VALUES('','李斌','男',20,'CS','1001',0)UPDATE Student SET Sno='' WHERE Sname = '张立'无法正确运行因为:违反了PRIMARY KEY 约束'PK__Student__CA1FE4647F60ED59'。
不能在对象'dbo.Student' 中插入重复键。
在MySQL中使用触发器和存储过程实现数据完整性
在MySQL中使用触发器和存储过程实现数据完整性导语:在数据库管理系统中,保证数据的完整性是非常重要的。
当多个用户同时访问数据库时,可能会发生一些错误,如数据丢失、不一致性等。
为了避免这些问题,MySQL提供了触发器和存储过程等功能,通过在特定事件发生时自动执行一些操作,从而实现数据的完整性。
一、触发器1. 触发器定义和使用方式触发器是MySQL中的一种特殊对象,可以在数据库表上定义,并指定在特定事件(如INSERT、UPDATE、DELETE)发生时自动触发执行。
触发器可以实现对数据的验证、限制和修改等操作,从而保证数据的完整性。
触发器的创建语法如下:```mysqlCREATE TRIGGER trigger_name{BEFORE | AFTER} {INSERT | UPDATE | DELETE}ON table_nameFOR EACH ROWtrigger_stmt```其中,trigger_name指定了触发器的名称,table_name指定了触发器所在的表名,BEFORE和AFTER指定了触发器的执行顺序,INSERT、UPDATE和DELETE指定了触发器所监听的事件,FOR EACH ROW表示触发器对每一行数据都会执行一次,trigger_stmt则是触发器执行的具体语句。
以下是一个简单的例子,通过触发器实现对用户表的省份字段进行验证:```mysqlCREATE TRIGGER trigger_nameBEFORE INSERT ON userFOR EACH ROWBEGINIF NEW.province NOT IN ('北京', '上海', '广州', '深圳') THENSIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '省份必须是北京、上海、广州或深圳';END IF;END;```当插入一条用户数据时,如果省份字段的值不在指定的范围内,触发器就会抛出一个错误。
实验八(上):SQL-Server用户自定义函数和触发器
实验八(上)用户自定义函数和触发器一、实验目的1、掌握SQLServer中用户自定义函数的使用方法。
2、掌握SQL Server中触发器的使用方法。
二、实验内容和要求1.创建一个返回标量值的用户定义函数RectangleArea:输入矩形的长和宽就能计算矩形的面积。
自选2种实例调用该函数。
create function RectangleArea(@a int,@b int)returns intasbeginreturn @a*@benddeclare @area intexecute @area=RectangleArea 3,5print('矩形面积是:')print @areadeclare @area intexecute @area=RectangleArea 7,8print('矩形面积是:')print @area2.创建一个用户自定义函数(内嵌表值函数),功能为产生某个系的学生选修信息,内容为学号,姓名,课程名,成绩。
调用这个函数,显示信息系有选课学生的信息。
create function Search (@sdept char(10))returns tableasreturn(select sc.sno 学号,student.sname 姓名,ame 课程名,sc.grade 成绩,student.sdept 系别from sc,student,course where o=o andsc.sno = student.sno and sdept=@sdept)select*from Search('cs')3.创建一个作用在P表上的触发器P_checks,确保用户在插入或更新P表的WEIGHT值时,所提供的WEIGHT值介于20与40之间,否则给出错误提示并回滚此操作。
请测试该触发器,测试方法自定。
create trigger P_checks on p for insertasbegindeclare @weight intselect @weight=weight from insertedif @weight<10 or @weight>20beginRAISERROR('weight 必须在~20之间!',16,1)ROLLBACK TRANSACTIONendendinsert into p(pno,pname,color,weight)values('p7','刀片','红',40)insert into p(pno,pname,color,weight)values('p7','刀片','红',15)select*from p4.创建一个作用在J表上的触发器J_Update,禁止同时修改项目的名称和所在城市,并进行相应的错误提示。
数据库原理实验报告-数据库的完整性
实验题目四、数据库的完整性一、实验目的1、掌握使用约束实现数据完整性的方法;2、掌握使用触发器实现数据完整性的方法;二、实验内容和要求1、设置主键约束、外键约束、唯一约束、非空约束、CHECK约束等;2、使用图形用户界面创建触发器、使用SQL语言创建触发器,实现完整性控制;三、实验主要仪器设备和材料1.计算机及操作系统:PC机,Windows 2000/XP或更高版本;2.数据库管理系统:SQL Server 2005或更高版本;四、实验方法、步骤及结果测试(一)、根据实验一中的基本表,使用约束创建数据完整性。
要求:1、删除teaching中的基本表。
按实验一中的各表的定义,重新创建student表、course1)创建各基本表的先后顺序有什么影响?2)在创建各表过程中,遇到了什么问题,是如何解决的?3、通过“ALERT TABLE”语句,完成下列操作:1)为student表的sname列添加唯一约束,并命名。
2)删除course表的非空约束。
3)为sc表的score列添加约束,取值范围为[0,100]。
4)定义域title_domain,取值为{助教,讲师,副教授,教师},检查SQL Server是否3、检查student表sname列的唯一约束插入新的数据记录对新建的唯一约束进行检查,写出相应的SQL语句,并将检查的执4、检查sc表score列的CHECK约束插入不在定义范围的数据记录检查约束。
写出相应的SQL语句,并将检查执行结果截(二)、通过图形用户界面的方式创建各类约束,定义数据的完整性1、删除sc表的外键约束。
在表设计器中,单击工具栏中的“表和索引属性”按钮,打开2、删除speciality的spname字段唯一约束。
然后在表设计器中,单击工具栏中的“表和3、在表设计器中,单击工具栏中的“表和索引属性”按钮,打开“属性”对话框,在“CHECK 约束”选项中,为teacher表中的title列设置检查约束,定义取值范围为{助教、讲师、副(三)、使用触发器实现数据的完整性1、在student表中创建触发器,实现student和sc表的级联删除。
数据库实验-完整性-索引-触发器说课讲解
数据库实验-完整性-索引-触发器实验五实验报告二、实验内容5.1 实体完整性1)在数据库School中建立表Stu_Union,进行主键约束,在没有违反实体完整性的前提下插入并更新一条记录建立表Stu_Union,进行主键约束在没有违反实体完整性的前提下插入一条记录在没有违反实体完整性的前提下更新一条记录2)演示违反实体完整性的插入操作3)演示违反实体完整性的更新操作4)演示事务的处理,包括事务的建立,处理以及出错时的事务回滚,演示事务处理和批处理的区别。
提示:SQL2005相关语句为BEGIN TRANROLLBACK TRANCOMMIT TRAN可以这样演示:新建一个包含两条语句的事务,使第一条成功而第二条失败,然后查看整个事务是否回滚。
重要提示:SQL默认只回滚出错的语句,要回滚整个事务,需要预先执行以下语句:SET XACT_ABORT ONa.先执行如下SQL语句(可执行成功)b.再执行如下语句,此时为执行第一句insert语句成功,第二句insert语句失败c.查询事物是否回滚由上可知,表为b步骤即事物出错前的状态,所以整个事物回滚。
5)通过建立Scholarship表,插入一些数据。
演示当与现有的数据环境不等时,无法建立实体完整性以及参照完整性。
提示:即演示不能为表Scholarship生成主键和外键的情况。
a.b. 不能为表Scholarship生成主键c.不能为表Scholarship生成外键5.2参照完整性1)为演示参照完整性,建立表Course,令cno为其主键,并在Stu_Union中插入数据。
为下面的实验步骤做预先准备。
在Stu_Union中插入数据建立表Course,令cno为其主键2)建立表sc,另sno和cno分别为参照Stu_Union表以及Course表的外键,设定为级连删除,并令(sno, cno)为其主键。
在不违反参照完整性的前提下,插入数据。
3)演示违反参照完整性的插入数据4)在Stu_Union中删除数据,演示级连删除。
在SQLServer使用触发器实现数据完整性
在SQLServer使用触发器实现数据完整性作者:陈潇来源:《电脑知识与技术》2013年第35期摘要:在SQLServer数据库中,数据的安全行和完整性是实现有效数据利用的前提条件。
该文主要介绍了触发器的原理、工作机制、与约束的区别,以及创建触发器的实例。
关键词:SQLServer;触发器;数据完整性中图分类号:TP391 文献标识码:A 文章编号:1009-3044(2013)35-7895-02In SQLServer Data Integrity Using TriggersCHEN Xiao———————(Xuzhou, Jiangsu Joint Vocational and Technical College of Information Technology,Finance Branch, Xuzhou 221008,China)Abstract: In SQLServer databases, data security and integrity of the line is to achieve a prerequisite for effective data utilization. This paper describes the principles of the trigger, working mechanism, and constraint distinction, and create triggers instance.Key words: SQL Server;trigger; data integrity1 实现数据完整性的手段在SQLServer中,在服务器端实现数据完整性主要有两种手段:一种是在创建表时定义数据完整性,主要分为:实体完整性、域完整性、和级联参照完整性;实现的手段是创建主键约束、唯一键约束、检查约束、默认值约束和各种级联完整性约束。
另一种是通过编写触发器语句来实现,通过定义触发条件和编写触发后执行语句,来实现对数据表操作的各种约束。
