数据库系统概论第五章章数据库完整性ppt
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第十章 数据库安全性 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 REPLICATION ] AS [ { IF UPDATE ( column ) [ { AND | OR } UPDATE ( column ) ] [ ...n ] | IF ( COLUMNS_UPDATED ( ) { bitwise_operator } updated_bitmask ) { comparison_operator } column_bitmask [ ...n ] }] sql_statement [ ...n ] } }
第五章
数据库完整性
要点和难点
• 数据库完整性的含义 • 数据库完整性控制方法 • SQL Server 2000中的完整性控制
第五章
数据库完整性
• 数据库的完整性是指:数据的正确性和相容性 • 数据库的安全性是指:保护数据库以防止不合 法的使用所造成的数据泄漏、更改或破坏 • 数据的完整性和安全性是两个不同的概念,但 它们又密切相关 完整性防止数据库中存在不符合语义的数据(即 垃圾进垃圾出), 安全性防止恶意破坏和非法存取(即非法用户和 操作)。 密切相关表现在可采用相同的机制来实现完整 性和安全性。
第五章
数据库完整性
为了维护数据库的完整性,DBMS必须能够: 1、提供定义完整性约束条件的机制 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将按照实体完整性规则自动进 行检查,包括: 1、检查主码值是否唯一,若不唯一则拒绝插入或修改 2、检查各主属性是否为空,只要有一个为空就拒绝插入 或修改
因为表级或列级的 CHECK 约束只能对 同一张表中的列定义它们之间的约束条件, 任何表之间的约束 (例如,一些商业规则) 必须定义为Triggers。
第十章 数据库安全性 10.3 SQL Server 2000中完整性
下例创建一个触发器,当插入或更新雇员工作级 别 (job_lvls) 时,该触发器检查指定雇员的工作级别 (由此决定薪水)是否处于为该工作定义的范围内。 若要获得适当的范围,必须引用 jobs 表。 CREATE TRIGGER employee_insupd ON employee 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.', 16, 1) ROLLBACK TRANSACTION END
第五章 数据库完整性
5.2 参照完整性
参照完整性在CREATE TABLE中用FOREIGN KEY 定义外码,用REFERENCES指明被参照表的主码。
wenku.baidu.com
实现参照完整性时要考虑的几个问题
1、外码能否接受空值 外码在本关系中是主属性时不能取空值 2、被参照关系中删除元组时的违约处理 级联删除、拒绝删除、置空删除(不一定可以) 3、被参照关系中修改元组的主码时的违约处理 级联修改、拒绝修改、置空修改(不一定可以) 4、参照关系中插入元组时的违约处理:拒绝插入 5、参照关系中修改元组的外码时的违约处理:拒绝修 改
第十章 数据库安全性 10.3 SQL Server 2000中完整性 一、CREATE TABLE
CREATE TABLE [ database_name.[ owner ] .| owner.] table_name ( { < column_definition > | column_name AS computed_column_expression | < table_constraint > ::= [ CONSTRAINT constraint_name ] } | [ { PRIMARY KEY | UNIQUE } [ ,...n ] ) < column_definition > ::= { column_name data_type } [ COLLATE < collation_name > ] [ [ DEFAULT constant_expression ] | [ IDENTITY [ ( seed , increment ) [ NOT FOR REPLICATION ] ] ] ] [ ROWGUIDCOL] [ < column_constraint > ] [ ...n ]
第十章 数据库安全性 10.3 SQL Server 2000中完整性
< table_constraint > ::= [ CONSTRAINT constraint_name ] { [ { PRIMARY KEY | UNIQUE } [ CLUSTERED | NONCLUSTERED ] { ( column [ ASC | DESC ] [ ,...n ] ) } [ WITH FILLFACTOR = fillfactor ] [ ON { 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中完整性
< column_constraint > ::= [ CONSTRAINT constraint_name ] { [ NULL | NOT NULL ] | [ { PRIMARY KEY | UNIQUE } [ CLUSTERED | NONCLUSTERED ] [ WITH FILLFACTOR = fillfactor ] [ON {filegroup | DEFAULT} ] ] ] | [ [ FOREIGN KEY ] REFERENCES ref_table [ ( ref_column ) ] [ ON DELETE { CASCADE | NO ACTION } ] [ ON UPDATE { CASCADE | NO ACTION } ] [ NOT FOR REPLICATION ] ] | CHECK [ NOT FOR REPLICATION ] ( logical_expression ) }
第十章 数据库安全性 10.3 SQL Server 2000中完整性
ON UPDATE {CASCADE | NO ACTION} 指定当要创建的表中的行具有引用关系,并且在父表中更 新该行所引用的行时,要对该行采取的操作。默认设置为 NO ACTION。 如果指定 CASCADE,则在父表中更新被引用行时,也将 在引用表中更新引用行。如果指定 NO ACTION,SQL Server 将产生一个错误并回滚父表中的行更新操作。 例如,在 Northwind 数据库中,Orders 表和 Customers 表之 间有引用关系:Orders.CustomerID 外键引用 Customers.CustomerID 主键。 如果对 Customers 表的某行执行 UPDATE 语句,并且为 Orders.CustomerID 指定 ON UPDATE CASCADE 操作,则 SQL Server 将在 Orders 表中检查是否有与被更新行相关的一行或多 行。如果存在相关行,则 Orders 表中的相关行将随 Customers 表中的被引用行一同更新。 反之,如果指定 NO ACTION,若在 Orders 表中至少有一 行引用 Customers 行,则 SQL Server 将产生一个错误并回滚对 Customers 行的更新操作。
第十章 数据库安全性 10.3 SQL Server 2000中完整性 定义列级FOREIGN KEY 约束的列的数据类 型必须与被引用表中对应的被引用列的数据类 型相同。 定义表级FOREIGN KEY 约束中所涉及到的 列的数目必须与被引用表中对应的被引用列的 数目相同,而且列的数据类型必须与被引用表 中对应的被引用列的数据类型相同。 如果一张表上既有FOREIGN KEY 或 CHECK约束又有Triggers,那么约束将在 Triggers之前被执行。
第十章 数据库安全性 10.3 SQL Server 2000中完整性
ON DELETE {CASCADE | NO ACTION} 指定当要创建的表中的行具有引用关系,并且从父表中删 除该行所引用的行时,要对该行采取的操作。默认设置为 NO ACTION。 如果指定 CASCADE,则从父表中删除被引用行时,也将 从引用表中删除引用行。如果指定 NO ACTION,SQL Server 将产生一个错误并回滚父表中的行删除操作。 例如,在 Northwind 数据库中,Orders 表和 Customers 表之 间有引用关系。Orders.CustomerID 外键引用 Customers.CustomerID 主键。 如果对 Customers 表的某行执行 DELETE 语句,并且为 Orders.CustomerID 指定 ON DELETE CASCADE 操作,则 SQL Server 将在 Orders 表中检查是否有与被删除的行相关的一行或 多行。如果存在相关行,则 Orders 表中的相关行将随 Customers 表中的被引用行一同删除。 反之,如果指定 NO ACTION,若在 Orders 表中至少有一 行引用 Customers 表中要删除的行,则 SQL Server 将产生一个 错误并回滚 Customers 表中的删除操作。
第十章 数据库安全性 10.3 SQL Server 2000中完整性 deleted 和 inserted 是逻辑(概念)表。这些 表在结构上类似于定义触发器的表(也就是在 其中尝试用户操作的表);这些表用于保存用 户操作可能更改的行的旧值或新值。例如,若 要检索 deleted 表中的所有值,请使用: SELECT * FROM deleted