数据库系统概论第五章章数据库完整性ppt_第1页
数据库系统概论第五章章数据库完整性ppt_第2页
数据库系统概论第五章章数据库完整性ppt_第3页
数据库系统概论第五章章数据库完整性ppt_第4页
数据库系统概论第五章章数据库完整性ppt_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第五章 数据库完整性 要点和难点 数据库完整性的含义 数据库完整性控制方法 SQL Server 2000中的完整性控制 第五章 数据库完整性 数据库的完整性是指:数据的正确性正确性和相容性相容性 数据库的安全性是指:保护数据库以防止不合不合 法法的使用所造成的数据泄漏、更改或破坏 数据的完整性和安全性是两个不同的概念,但 它们又密切相关 完整性防止数据库中存在不符合语义的数据(即 垃圾进垃圾出), 安全性防止恶意破坏和非法存取(即非法用户和 操作)。 密切相关表现在可采用相同的机制来实现完整 性和安全性。 第五章 数据库完整性 为了维护数据库的完整性,DBMS必须能够: 1、提供定义完整性约

2、束条件的机制 2、提供完整性检查的方法 3、违约处理 完整性定义与检查控制由DBMS实现,不必 由应用程序来完成,从而减轻了应用程序员的 负担。 目前的关系系统中对违反实体完整性和用户自 定义完整性一般采用拒绝执行方式。 第五章 数据库完整性 5.1 实体完整性 实体完整性在CREATE TABLE中用PRIMARY KEY 定义,例如: CREATE TABLE SC ( Sno CHAR(9), Cno CHAR(4), Grade SMALLINT, PRIMARY KEY(Sno, Cno) ) 以后每当用户程序对基本表插入一个元组或修改一个 元组的主码时,DBMS将按照实体完整性规则

3、自动进 行检查,包括: 1、检查主码值是否唯一,若不唯一则拒绝插入或修改 2、检查各主属性是否为空,只要有一个为空就拒绝插入 或修改 第五章 数据库完整性 5.2 参照完整性 参照完整性在CREATE TABLE中用FOREIGN KEY 定义外码,用REFERENCES指明被参照表的主码。 实现参照完整性时要考虑的几个问题 1、外码能否接受空值 外码在本关系中是主属性时不能取空值 2、被参照关系中删除元组时的违约处理 级联删除、拒绝删除、置空删除(不一定可以) 3、被参照关系中修改元组的主码时的违约处理 级联修改、拒绝修改、置空修改(不一定可以) 4、参照关系中插入元组时的违约处理:拒绝插入

4、 5、参照关系中修改元组的外码时的违约处理:拒绝修 改 第十章 数据库安全性 10.3 SQL Server 2000中完整性 一、CREATE TABLE CREATE TABLE database_name. owner .| owner. table_name ( | column_name AS computed_column_expression | := CONSTRAINT constraint_name | PRIMARY KEY | UNIQUE ,.n ) := column_name data_type COLLATE DEFAULT constant_expressio

5、n | IDENTITY ( seed , increment ) NOT FOR REPLICATION ROWGUIDCOL .n 第十章 数据库安全性 10.3 SQL Server 2000中完整性 := CONSTRAINT constraint_name NULL | NOT NULL | PRIMARY KEY | UNIQUE CLUSTERED | NONCLUSTERED WITH FILLFACTOR = fillfactor ON filegroup | DEFAULT | FOREIGN KEY REFERENCES ref_table ( ref_column )

6、ON DELETE CASCADE | NO ACTION ON UPDATE CASCADE | NO ACTION NOT FOR REPLICATION | CHECK NOT FOR REPLICATION ( logical_expression ) 第十章 数据库安全性 10.3 SQL Server 2000中完整性 := CONSTRAINT constraint_name PRIMARY KEY | UNIQUE CLUSTERED | NONCLUSTERED ( column ASC | DESC ,.n ) WITH FILLFACTOR = fillfactor ON

7、 filegroup | DEFAULT | FOREIGN KEY ( column ,.n ) REFERENCES ref_table ( ref_column ,.n ) ON DELETE CASCADE | NO ACTION ON UPDATE CASCADE | NO ACTION NOT FOR REPLICATION | CHECK NOT FOR REPLICATION ( search_conditions ) 第十章 数据库安全性 10.3 SQL Server 2000中完整性 ON DELETE CASCADE | NO ACTION 指定当要创建的表中的行具有引

8、用关系,并且从父表中删 除该行所引用的行时,要对该行采取的操作。默认设置为 NO ACTION。 如果指定 CASCADE,则从父表中删除被引用行时,也将 从引用表中删除引用行。如果指定 NO ACTION,SQL Server 将产生一个错误并回滚父表中的行删除操作。 例如,在 Northwind 数据库中,Orders 表和 Customers 表之 间有引用关系。Orders.CustomerID 外键引用 Customers.CustomerID 主键。 如果对 Customers 表的某行执行 DELETE 语句,并且为 Orders.CustomerID 指定 ON DELETE

9、CASCADE 操作,则 SQL Server 将在 Orders 表中检查是否有与被删除的行相关的一行或 多行。如果存在相关行,则 Orders 表中的相关行将随 Customers 表中的被引用行一同删除。 反之,如果指定 NO ACTION,若在 Orders 表中至少有一 行引用 Customers 表中要删除的行,则 SQL Server 将产生一个 错误并回滚 Customers 表中的删除操作。 第十章 数据库安全性 10.3 SQL Server 2000中完整性 ON UPDATE CASCADE | NO ACTION 指定当要创建的表中的行具有引用关系,并且在父表中更 新

10、该行所引用的行时,要对该行采取的操作。默认设置为 NO ACTION。 如果指定 CASCADE,则在父表中更新被引用行时,也将 在引用表中更新引用行。如果指定 NO ACTION,SQL Server 将产生一个错误并回滚父表中的行更新操作。 例如,在 Northwind 数据库中,Orders 表和 Customers 表之 间有引用关系:Orders.CustomerID 外键引用 Customers.CustomerID 主键。 如果对 Customers 表的某行执行 UPDATE 语句,并且为 Orders.CustomerID 指定 ON UPDATE CASCADE 操作,则

11、SQL Server 将在 Orders 表中检查是否有与被更新行相关的一行或多 行。如果存在相关行,则 Orders 表中的相关行将随 Customers 表中的被引用行一同更新。 反之,如果指定 NO ACTION,若在 Orders 表中至少有一 行引用 Customers 行,则 SQL Server 将产生一个错误并回滚对 Customers 行的更新操作。 第十章 数据库安全性 10.3 SQL Server 2000中完整性 定义列级FOREIGN KEY 约束的列的数据类 型必须与被引用表中对应的被引用列的数据类 型相同。 定义表级FOREIGN KEY 约束中所涉及到的 列的

12、数目必须与被引用表中对应的被引用列的 数目相同,而且列的数据类型必须与被引用表 中对应的被引用列的数据类型相同。 如果一张表上既有FOREIGN KEY 或 CHECK约束又有Triggers,那么约束将在 Triggers之前被执行。 第十章 数据库安全性 10.3 SQL Server 2000中完整性 二、CREATE TRIGGER CREATE TRIGGER trigger_name ON table | view WITH ENCRYPTION FOR | AFTER | INSTEAD OF INSERT , UPDATE WITH APPEND NOT FOR REPLICA

13、TION AS IF UPDATE ( column ) AND | OR UPDATE ( column ) .n | IF ( COLUMNS_UPDATED ( ) bitwise_operator updated_bitmask ) comparison_operator column_bitmask .n sql_statement .n 第十章 数据库安全性 10.3 SQL Server 2000中完整性 deleted 和 inserted 是逻辑(概念)表。这些 表在结构上类似于定义触发器的表(也就是在 其中尝试用户操作的表);这些表用于保存用 户操作可能更改的行的旧值或新值

14、。例如,若 要检索 deleted 表中的所有值,请使用: SELECT * FROM deleted 因为表级或列级的 CHECK 约束只能对 同一张表中的列定义它们之间的约束条件, 任何表之间的约束 (例如,一些商业规则) 必须定义为Triggers。 第十章 数据库安全性 10.3 SQL Server 2000中完整性 下例创建一个触发器,当插入或更新雇员工作级 别 (job_lvls) 时,该触发器检查指定雇员的工作级别 (由此决定薪水)是否处于为该工作定义的范围内。 若要获得适当的范围,必须引用 jobs 表。 CREATE TRIGGER employee_insupd ON e

15、mployee FOR INSERT, UPDATE AS /* Get the range of level for this job type from the jobs table. */ DECLARE min_lvl tinyint, max_lvl tinyint, emp_lvl tinyint, job_id smallint 第十章 数据库安全性 10.3 SQL Server 2000中完整性 SELECT min_lvl = min_lvl, max_lvl = max_lvl, emp_lvl = i.job_lvl, job_id = i.job_id FROM employee e INNER JOIN inserted i ON e.emp_id = i.emp_id JOIN jobs j ON j.job_id = i.job_id IF (job_id = 1) and (emp_lvl 10) BEGIN RAISERROR (Job id 1 expects the default level of 10.,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论