第五章 数据库完整性

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

ii)通过修改表定义ForeignБайду номын сангаасkey约束 语法格式:
ALTER TABLE table_name ADD [constraint constraint_name] [FOREIGN KEY] (column[,…n]) REFERNCES ref_table(ref_column [,…n]) [ on delete {CASCADE | no action}] [ on update {CASCADE | no action}]
字段创建主键约束, 例1:定义数据表 :定义数据表student时,为学号 时 为学号sno字段创建主键约束,对 字段创建主键约束 姓名sname字段定义惟一值约束; 字段定义惟一值约束; 姓名 字段定义惟一值约束 方法1:在列级定义主码 Use stu
CREATE TABLE student (Sno char(9) constraint sno_pk primary key, Sname char(8) constraint sname_uk unique, Ssex char(2) , Sage smallint , Sdept varchar(20))
中创建主表student和course,主键分别为 例1:在数据库 :在数据库stu中创建主表 中创建主表 和 , sno和cno,创建从表 ,sc.sno为外码,与数据表 为外码, 和 ,创建从表sc, 为外码 与数据表student 主键对应,当对主表进行更新或删除操作时, 主键对应,当对主表进行更新或删除操作时,对从表采用级联 操作; 为外码, 主键对应, 操作;sc.cno为外码,与数据表 为外码 与数据表course主键对应,当对主表 主键对应 进行更新或删除操作时,对从表采用NO Action方式。 进行更新或删除操作时,对从表采用 方式。 方式 Use stu Create table student(sno char(9) primary key,sname……) Create table course (cno char(4) primary key,sname……) Create table sc (sno char(9) foreign key references student(sno) on delete cascade on update cascade, cno char(4) foreign key references course(cno) on delete no action on update no action , Grade smallint )
违约处理
若用户操作违反完整性约束条件,采取一定的动作,如拒绝执 行(NO ACTION)、级联执行或其他操作;
2、数据库完整性约束机制分类
完整性约束条件作用的对象有关系、元组、列三种;可分为: 实体完整性:实体完整性是为了保证表中的数据唯一; 实体完整性 参照完整性: 参照完整性:参照完整性用于确保相关联的表间的数据应保持一致, 避免因一个表的记录修改,造成另一个表的内容变为无效的值.一 般来说,参照完整性是通过外键和主键来维护的; 域完整性: 域完整性:域完整性可以保证数据的取值在有效的范围内; 用户定义完整性: 用户定义完整性:由用户自行定义的,不同于前面3种的完整性, 也可以说一种强制数据定义;
3)域完整性 )
域:指列(字段),所以域完整性就是指列的完整性; 域完整性要求列(字段)的数据具有正确的数据类型、格式和 有效的数值范围。 域完整性的常见实现机制包括:
默认值(Default) 检查(Check) 数据类型(Data type) 规则(Rule)
4)用户自定义完整性 )
用户定义的完整性就是针对某一具体应用的数据必须满 足的语义要求;可直接由RDBMS提供,而不必由应用程 序承担;系统将实现数据完整性的要求直接定义在表上 或列上。 常见的实现机制包括:
1)实体完整性 )
实体(Entity):是数据逻辑模型中的一个概念。现实世界是一 组实体的基本对象和这些对象的联系(Relation)构成的。在 数据库中,我们可以理解一条记录就是一个实体。 实体完整性:在现实世界中,任何一个实体都有区别于其他实 任何一个实体都有区别于其他实 体的特征,即在数据库中,所有的记录都应该有惟一的标识, 体的特征 这就是实体完整性的含义(规则2.1:实体完整性规则)。
可能破坏参照完整性的情况及违约处理
被参照表(例如Student) 可能破坏参照完整性 可能破坏参照完整性 删除元组 修改主码值
参照表(例如SC) 插入元组 修改外码值 可能破坏参照完整性 可能破坏参照完整性
违约处理 拒绝 拒绝 拒绝/级连删除/设置为空值 拒绝/级连修改/设置为空值
当主码外码发生不一致时,系统可采取以下策略: 1. 拒绝(NO ACTION)执行
规则(Rule)、创建数据表时的所有约束(Constraint)、触发 器(Trigger)、存储过程(Stored Produre);
二、在SQL Server 2005中实现数据完整性 中实现数据完整性
SQL Server 2005提供了完善的数据完整性机制,主 要包括约束、默认值和规则3类;
参照完整性的常见实现机制包括:
外键(Foreign Key)、检查(Check)、触发器(Trigger);存 储过程(Stored Procedure)
在输入或删除记录时,可以用来保持所有表之间定义的关 系,以确保键值在所有表中一致。 关系模型的参照完整性定义
在CREATE TABLE中用FOREIGN KEY短语定义哪些列为 外码 用REFERENCES短语指明这些外码参照哪些表的主码
第五章 数据库完整性
授课教师:王哲
数据库完整性
数据是数据库的核心,数据的正确和完整与否将直接影响数据 库的使用。 数据的完整性 安全性 完整性和安全性 完整性 安全性是两个不同概念;
数据的安全性
保护数据库防止恶意的破坏和非法的存取 防范对象:非法用户和非法操作
数据的完整性
防止数据库中存在不符合语义的数据,也就是防止数据库中存在不正 确的数据 防范对象:不合语义的、不正确的数据
多个属性构成的码只有一种说明方法: 多个属性构成的码只有一种说明方法
定义为表级约束条件
创建约束方式: I. II. 创建表时同时创建primary key约束或unique约束 修改表时同时创建primary key约束或unique约束
i)创建表时同时创建primary key约束或 )创建表时同时创建 约束或unique约束 约束或 约束 语法结构: CREATE TABLE table_name (column_name data_type (NULL| NOT NULL) [ [CONSTRAINT constraint_name] { PRIMARY KEY | unique} [, ...n]
本次课内容
一. 数据完整性概述 二. 在SQL Server 2005中实现数据完整性 三. 其他相关知识
触发器
一、数据库完整性概述
1、DBMS必须能够提供
提供定义完整性约束条件的机制
完整性约束条件 = 完整性规则,由SQL的ddl语句来实现;
提供完整性检查的机制
检查数据是否满足完整性约束条件的机制;
方法2:在表级定义主码 CREATE TABLE Student (Sno CHAR(9) , Sname CHAR(20) , Ssex CHAR(2) , Sage SMALLINT, Sdept CHAR(20), PRIMARY KEY (Sno) )
实体完整性检查:
插入或对主码列进行更新操作时,RDBMS按照实体完整性规则自 动进行检查。包括: 1. 检查主码值是否唯一,如果不唯一则拒绝插入或修改 2. 检查主码的各个属性是否为空,只要有一个为空就拒绝插 入或修改
创建及管理约束及约束对象 默认值约束及默认值对象 创建及管理规则对象
1、创建及管理约束及约束对象 、
主键Primary key约束 惟一值Unique约束 外键Foreign key约束 检查Check约束
1)创建及删除主键约束及惟一值约束 )
单属性构成的码的两种说明方法 :
定义为列级约束条件,定义为表级约束条件
(column [,...n])
学号sno字段添加主键约束,对学生姓名 字段添加主键约束, 例1:对数据表 :对数据表student学号 学号 字段添加主键约束 添加惟一值约束; 添加惟一值约束; Alter table student Add constraint sno_pk primary key sno
检查方法:全表扫描、索引
ii)通过修改表时同时创建primary key约束或 )通过修改表时同时创建 约束或unique约束 约束或 约束 语法格式:
ALTER TABLE table_name ADD [CONSTRAINT constraint_name]
primary key | unique
Alter table student Add constraint sname_uk unique sname
删除primary key约束或 约束或unique约束 删除 约束或 约束 语法格式:
ALTER TABLE table_name DROP CONSTRAINT constraint_name [, ...n]
常见的实体完整性机制包括:
主键(Primary Key);惟一码(Unique);
2)参照完整性 )
参照完整性是指在两个表的主键和外键之间数据的完整性,其 含义包括:
参照完整性保证被参照表和参照表之间数据的一致性; 可以防止数据丢失或者无意义的数据; 可以禁止在从表中插入被参照表中不存在的关键字的记录。
例1:删除 :删除student中的主键约束和惟一值约束 中的主键约束和惟一值约束
ALTER TABLE student Drop constraint sno_pk,sname_uk
查看主键约束的定义文本 EXEC sp_helptext <constraint_name> 查看表中主键约束 EXEC sp_helpconstraint <table_name> 查看数据库中所有主键约束 SELECT name from sysobjects WHERE type=‘K‘ 备注: K:primary key或unique约束;F:foreign key C:check约束;D:默认值;R:规则;TR:触发器; U:用户表; V:视图
默认策略
2. 级联(CASCADE)操作 3. 设置为空值(SET-NULL)
对于参照完整性,除了应该定义外码,还应定义外码列是否允 许空值
i)创建表时同时定义Foreign key约束 语法格式:
CREATE TABLE table_name (column_name data_type [FOREIGN KEY] REFERNCES ref_table(ref_column) [ on delete {CASCADE | no action}] --cascade表示主从表删除时一致,进行级联删除 --no action 表示回滚主表的删除操作,为默认设置 [ on update {CASCADE | no action}] [, ...n] ) --主从表更新时一致 --n表示可定义多个字段
为主表, 例1:假设数据库 :假设数据库stu中student和course为主表,主键分别为 中 和 为主表 sno和cno, sc为从表,将sc.sno定义为外码。 为从表, 定义为外码。 和 , 为从表 定义为外码 Use stu Alter table sc ADD constraint sc_fk foreign key sno references student(sno)
2)创建及管理外键约束 )
对于两个相关联的表(主表与从表)进行数据插入和删除时, 通过参照完整性保证他们之间数据的一致性。 利用Foreign Key定义从表的外码,Primary Key或者Unique定 义主表中的主码或惟一码(不允许为空),可实现主表与从表 之间的参照完整性。 定义表间参照关系:先定义主表主码(或惟一码),再对从表 定义外码约束。
相关文档
最新文档