第5篇完整性约束定义
完整性约束

z Insert、 delete、update
数据库系统概念----高级SQL
20
完整性控制
create trigger trigger-name insert
begin after
delete
on table-name
update [of column-name]
referencing
数据库系统概念----高级SQL
15
完整性控制
– 域约束的创建、撤消与添加
create domain AGE_DOMAIN smallint constraint DC_AGE check(value <= 25 and value
>= 15) alter domain AGE_DOMAIN
add constraint DC_AGE check(value <= 35 and value >= 15) alter domain AGE_DOMAIN
insert into loan values(nrow.account-number,
nrow.branch-name, – nrow.balance);
update account set balance = 0
where account.account-number = nrow.account-number
– 如果关系R2的外部码Fk与关系R1的主码Pk相对应,则R2 中的每一个元组的Fk值或者等于R1 中某个元组的Pk 值,或者为空值
– 意义:如果关系R2的某个元组t2参照了关系R1的某 个元组t1,则t1必须存在
– 例如关系S在Dno上的取值有两种可能
空值,表示该学生尚未分到任何系中;若非空值,则必须是DEPT关
第五章-完整性约束

第五章-完整性约束⽬录1. 概述数据库的完整性指数据的正确性(correctness)和相容性(compat-ability)。
正确性:指数据符合现实语义。
相容性:指同⼀对象在不同关系表中的数据是符合逻辑的。
为了维护数据库的完整性,数据库管理系统(DBMS)必须实现如下功能:定义完整性约束在SQL标准中定义了⼀系列定义完整性约束的语句。
完整性检查检查数据是否符合完整性约束条件的机制成为完整性检查。
完整性检查通常在INSERT、UPDATE、DELETE语句执⾏后开始检查,也可在事务提交时检查。
违约处理在DBMS发现⽤户的操作违背了完整性约束条件,将采取⼀定的操作。
关系数据库管理系统使得完整性控制成为其核⼼⽀持的功能,从⽽能为所有⽤户和应⽤提供⼀致的数据库完整性。
数据库完整性主要分为:实体完整性、参照完整性和⽤户定义完整性。
在下⽂中,我将逐⼀介绍上述三类完整性,并且还会介绍⼀些SQL中定义的⼀些特性。
2. 实体完整性定义实体完整性⽰例:CREATE TABLE Student(Sno CHAR(9) PRIMARY KEY, -- 在列⼀级定义主码Sname CHAR(20),Ssex CHAR(2),Sage SMALLINT,Sdept CHAR(20)PRIMARY KEY(Sno) -- 在表⼀级定义主码);实体完整性检查和违约处理使⽤PRIMARY KEY短语定义关系的主码后。
每当⽤户插⼊或更新记录时,DBMS都会⾃动进⾏实体完整性检查:检查主码是否唯⼀,若不唯⼀便拒绝插⼊或修改。
检查主码的各个属性是否为空,若存在为空便拒绝插⼊或修改。
3. 参照完整性关系模型的参照完整性在创建表时使⽤FOREIGN KEY短语定义参照关系。
定义参照完整性⽰例:CREATE TABLE SC(Sno CHAR(9) NOT NULL,Cno CHAR(4) NOT NULL,Grade SMALLINT,PRIMARY KEY (Sno, Cno),FOREIGN KEY (Sno) REFERENCES Student(Sno), -- 定义表级参照完整性FOREIGN KEY (Cno) REFERENCES Student(Cno) -- 定义表级参照完整性);参照完整性检查如你所知,参照完整性将两个表中相应的元组联系起来。
第5章 完整性约束定义

2. 实体完整性
实体完整性是指保证表中所有的行唯一。实体完整性要求表中 的所有行都有一个唯一标识符。这个唯一标识符可能是一列, 也可能是几列的组合,称之为主键。也就是说,表中主键在所 有行上必须取值唯一。强制实体完整性的方法有:索引、 UNIQUE约束、PRIMARY KEY约束或 IDENTITY属性 。
参照完整性也叫引用完整性。参照完整性总是保证主关键字 (被引用表)和外部关键字(引用表)之间的参照关系。它涉 及两个或两个以上表数据的一致性维护。
2
3. 参照完整性
5.4.2
数据完整性实施方法
1. 声明型数据完整性 声明型数据完整性一般在对象创建时定义,由SQL Server强制 实施,通常使用约束、缺省值和规则来实现。实现基本数据完 整性的首选方法是使用声明型数据完整性。 声明型数据完整性作为数据库对象说明的一部分在语法中实现, 在CREATE TABLE和ALTER TABLE定义中使用CONSTRAINT、 DEFAULT等语句限制表中的值。使用这种方法实现数据完整性 简单且不易出错,系统直接将实现数据完整性的要求定义在表 和列上。 过程型数据完整性是指由某个过程引发而实施的数据完整性。 一般先写出实施数据完整性的条件,再写出强制该条件所执行 的用于保证数据完整性的脚本。通常由触发器和存储过程实现。 过程型数据完整性也可以在客户机和服务器上使用其它编程语 言和工具实现。
3
2. 过程型数据完整性
5.4.3 约束
1.约束的定义和类型
约束是SQL Server提供的自动保持数据库完整性的一种方法 。
列级约束:列级约束是行定义的一部分,只能够应用在一列上。
表级约束:表级约束的定义独立于列的定义,可以应用在一个表 中的多列上。
完整性约束的SQL定义

完整性约束的SQL定义更新数据库时,表中不能出现不符合完整性要求的记录,以保证为⽤户提供正确、有效的数据。
实现该⽬的最直接的⽅法,是在编写数据库应⽤程序时,对每个更新操作都进⾏完整性检查。
但这种检查往往是复杂、重复、低效的。
SQL把各种完整性约束作为数据库模式定义的⼀部分,由数据库管理系统维护,这样即可有效防⽌对数据库的意外破坏,提⾼了完整性检测的效率,⼜减轻了编程⼈员的负担。
SQL Server⽀持三种完整性约束:1、实体完整性2、参照完整性(或引⽤完整性)3、⽤户⾃定义完整性1、实体完整性和主码实体完整性是通过主码(PRIMARY KEY)的定义来实现的。
⼀旦某个属性或属性组被定义为主码,该主码的每个属性就不能为空值,并且在表中不能出现主码值完全相同的两个记录。
主码可以在CREATE TABLE语句中使⽤PRIMARY KEY定义。
有两种定义主码的⽅法:⼀种是在属性后增加关键字,另⼀种是在属性表中加⼊额外的定义主码的⼦句:PRIMARY KEY(主码属性名表)。
(1)属性后增加关键字定义CREATE TABLE StudentInfo(StudentID char(8) PRIMARY KEY,StudentName varchar(10),StudentSex bit);(2)加⼊额外的定义主码的⼦句CREATE TABLE StudentInfo(StudentID char(8),StudentName varchar(10),StudentSex bit,PRIMARY KEY(StudentID));如果表的主码只含有单个属性,上⾯的两种⽅法都可以使⽤。
如果主码由多个属性组成,只能使⽤第⼆种⽅法。
除了主码,SQL提供了类似候选码的说明⽅法,使⽤关键字UNIQUE定义(与候选码不同的是:定义为UNIQUE的属性可以定义为空值,但只能有⼀个记录该属性的值为NULL),说明该属性(或属性组)的值不能重复。
数据库完整性约束

数据库完整性约束原创数据库完整性约束分为三种:实体完整性约束、参照完整性约束、⽤户定义的完整性实体完整性规则:若属性(指⼀个或⼀组属性)A是基本关系R的主属性,则A不能取空值。
所谓空值就是”不知道“或”不存在“或”⽆意义“的值。
意思⼗分明显,就是关系中的主码是不能取空值的参照完整性定义:设F施基本关系R的⼀个或⼀组属性,但不是关系R的码,K S是基本关系S的主码。
如果F与K S相对应,则称F是R的外码,并称基本关系R为参照关系,基本关系S为被参照关系或⽬标关系。
规则:若属性(或属性组)F是基本关系R的外码,它与基本关系S的主码K S相对应,则对于R中每个元组在F上的值必须:或者取空值或者等于S中某个元祖的主码值⽤户定义的完整性任何关系数据库系统都应该⽀持实体完整性和参照完整性。
除此之外,不同的关系数据库系统根据其应⽤环境的不同,往往还需要⼀些特殊的约束条件。
⽤户定义的完整性就是针对某⼀具体关系数据库的约束条件,它反映某⼀具体应⽤所涉及的数据必须满⾜的语义要求。
定义实体完整性关系模型的实体完整性在CREATE TABLE中⽤PRIMARY KEY定义。
对单属性构成的码有两种说明⽅法,⼀种是定义为列级约束条件,另⼀种是定义为表级约束条件。
对多个属性构成的码只有⼀种说明⽅法,即定义为表级约束条件。
/*建⽴Student表*/create table Student(sno char(9) primary key, //在列级定义主码sname char(20) not null,ssex char(2),sage smallint,sdept char(20));/*建⽴Course表*/create table Course(cno char(9),cname char(20)primary key(cno) //在表级定义主码)实体完整性检查:检查主码值是否唯⼀,如果不唯⼀则拒绝插⼊或修改。
检查主码的各个属性是否为空,只有有⼀个为空就拒绝插⼊或修改。
第5章完整性约束定义(精)

5. 4数据完整性的概念与实施方法5.4. 1数据完整性概念■数据完整性是指数据的正确性、完备性和一致性,是衡量数据库质量好坏的重要标准。
■在用INSERT. DELETE. UPDATE语句修改数扌居库内容时, 数据的完整性可能会遭到破坏。
可能会存在下列情况: 无效的数据被添加到数据库的表中。
如:将学生考试成绩输入成负数;■SQL Server提供了对数据库中表、列实施数据完整性的方法。
对表进行设计数据完整性有两个重要内容:标识列的有效值和确定如何强制列中的数据完整性。
1.域完整性■域完整性是指一个列的输入有效性,是否允许空值。
强制域完整性的方法有:限制类型(通过设定列的数据类型)、格式(通过CHECK约束和规则)或可能值的范围(通过FOREIGN KEY约束、CHECK约束、DEFAULT定义、NOT NULL定义和规则)。
2.实体完整性■实体完整性是指保证表中所有的行唯一。
实体完整性要求表中的所有行都有一个唯一标识符。
这个唯一标识符可能是一列,也可能是几列的组合,称之为主键。
也就是说,表中主键在所有行上必须取值唯一。
强制实体完整性的方法有:索引、UNIQUE约束、PRIMARY KEY约束或IDENTITY属性。
3.参照完整性■参照完整性也叫引用完整性。
参照完整性总是保证主关键字(被引用表)和外部关键字(引用表)之间的参照关系。
它涉及两个或两个以上表数据的一致性维护。
5.4. 2 数据完整性实施方法1.声明型数据完整性■声明型数据完整性一般在对象创建时定义,由SQL Server强制实施,通常使用约束、缺省值和规则来实现。
实现基本数据完整性的首选方法是使用声明型数据完整性。
■声明型数据完整性作为数据库对象说明的一部分在语法中实现, 在CREATE TABLE和ALTER TABLE定义中使用CONSTRAINT. DEFAULT 等语句限制表中的值。
使用这种方法实现数据完整性简单且不易出错,系统直接将实现数据完整性的要求定义在表和列上。
关系数据库的完整性约束

关系数据库的完整性约束关系数据库是一种常用的数据库模型,它使用表格来存储和组织数据。
在关系数据库中,完整性约束是一种重要的机制,用于确保数据的一致性和准确性。
本文将介绍关系数据库的完整性约束的定义、类型以及它们在数据库设计和数据管理中的作用。
一、完整性约束的定义完成性约束是指定义在关系数据库表上的规则,用于保证数据的完整性。
它可以限制某些列的取值范围、规定表之间的关系、强制规则和业务规则等。
通过定义完整性约束,可以防止不一致、不准确或不符合业务规则的数据进入数据库。
二、完整性约束的类型1. 实体完整性约束实体完整性约束用于确保每一行数据在主键列上具有唯一的值,并且不为空。
主键是关系数据库中用于唯一标识每一行数据的列或列组合。
2. 引用完整性约束引用完整性约束用于确保表之间的关系的一致性。
它结合了外键和主键的概念,确保在外键列中的值必须在参照表的主键列中存在。
这样可以防止不一致的关系建立或错误的数据引用。
3. 域完整性约束域完整性约束用于限制某些列的取值范围。
可以通过定义数据类型、长度、格式等约束来确保数据的准确性和一致性。
4. 用户自定义完整性约束用户自定义完整性约束是根据特定业务需求定义的约束规则。
可以使用触发器、存储过程或触发器等数据库对象来实现自定义完整性约束。
5. 断言完整性约束断言完整性约束是在SQL标准中定义的,用于在关系数据库中表示某种条件必须成立。
断言可以在表创建时定义或随后添加,以确保数据满足特定条件。
三、完整性约束的作用1. 数据的一致性和准确性:通过完整性约束,可以限制数据的取值范围和关系,确保数据的准确性和一致性。
2. 数据的安全性:完整性约束可以防止数据被非法篡改、删除或插入不符合规定的数据。
3. 业务规则的保护:通过完整性约束,可以确保数据库中存储的数据符合特定的业务规则。
4. 避免错误的数据关联:引用完整性约束可确保外键的合法性,防止不一致的数据关联。
5. 数据的可靠性和可维护性:通过定义完整性约束,可以为数据库提供可靠的结构和规范,便于数据的管理和维护。
数据库技术中的数据完整性约束(五)

数据完整性约束是数据库技术中非常重要的一环。
它能够保证数据库中的数据准确、一致和可靠,从而确保数据库系统的正确性和可信度。
在这篇文章中,我们将探讨数据完整性约束的定义、类型以及在实际应用中的重要性。
1. 定义数据完整性约束指的是对数据库中的数据进行约束和限制,以确保数据的准确性和一致性。
通过定义和实施数据完整性约束,可以防止不符合事务要求或业务规则的数据被插入、修改或删除。
2. 类型数据完整性约束可以分为以下几种类型:实体完整性约束实体完整性约束是指对数据库中的实体对象的约束,确保每个实体具有唯一性。
例如,对于一个学生表,可以通过指定学生ID字段为主键,来保证每个学生有唯一的ID。
域完整性约束域完整性约束保证数据在一定的范围内,符合业务要求。
例如,对于学生成绩表,可以限制成绩字段的取值范围在0到100之间。
参照完整性约束参照完整性约束用于确保外键的有效性。
在关系型数据库中,可以通过引用主键来确保外键引用的表中存在对应的记录。
例如,如果有一个订单表和一个客户表,可以通过外键约束确保每个订单必须关联一个有效的客户。
用户定义完整性约束用户定义完整性约束是指根据具体业务规则定义的约束条件。
通过用户定义完整性约束,可以适应不同业务需要。
例如,对于一个邮寄地址表,可以定义一个用户定义完整性约束,确保邮政编码必须符合特定的格式。
3. 重要性数据完整性约束在数据库系统中具有重要的意义:数据准确性数据完整性约束能够确保数据的准确性。
它可以防止非法、无效或不一致的数据被插入或修改,从而保证数据的准确性和可信度。
业务规则数据完整性约束可以根据业务规则定义和实施约束条件。
通过数据完整性约束,可以确保数据库中存储的数据满足业务规则的要求,从而提高系统的可用性和可靠性。
数据一致性数据完整性约束可以保证数据库中的数据一致性。
通过定义合适的完整性约束,可以确保数据在不同的表之间保持一致,并防止数据冲突和不一致的情况发生。
保护数据安全数据完整性约束可以防止非法操作和恶意篡改数据。
MySQL中的数据完整性与约束定义

MySQL中的数据完整性与约束定义MySQL是一种常用的关系型数据库管理系统,由于其开源性和易用性,广泛应用于各个领域。
在数据库中,数据完整性是一项至关重要的概念,它确保了数据的准确性和可靠性。
本文将介绍MySQL中的数据完整性与约束定义,并着重讨论一些常见的约束定义和它们的作用。
一、数据完整性的概念和重要性数据完整性是指数据库中的数据应满足所有定义的规则,以确保数据的准确性、一致性和有效性。
数据完整性能够保证数据的完全性和可靠性,是数据库中必不可少的一项功能。
数据完整性的重要性体现在以下几个方面:1. 数据的准确性:通过定义各种约束,可以防止非法的或不符合要求的数据插入数据库中,确保数据的准确性。
2. 数据一致性:通过定义外键约束等,可以保持数据间的一致性,避免出现不一致的情况。
3. 数据有效性:通过定义检查约束等,可以限制数据的取值范围,确保数据的有效性。
4. 数据安全性:数据完整性还有助于保护数据的安全性,防止误操作或非法访问对数据造成的破坏。
二、主键约束主键约束是一个用于唯一标识表中每一行的字段或字段组合,确保表中每一行的唯一性。
在MySQL中,主键约束可以通过PRIMARY KEY关键字来定义。
主键约束的作用有:1. 确保表中的每一行都有唯一标识,方便对数据进行查询和修改。
2. 加速查询速度:主键约束在创建索引时会自动为主键字段创建索引,提高查询速度。
3. 防止重复数据的插入:当插入重复的主键值时,MySQL会报错并拒绝插入。
三、唯一约束唯一约束用于确保表中的某一列或某几列的值唯一。
在MySQL中,唯一约束可以通过UNIQUE关键字来定义。
唯一约束的作用有:1. 防止重复数据的插入:当插入重复的唯一约束值时,MySQL会报错并拒绝插入。
2. 加速查询速度:唯一约束在创建索引时会自动为唯一字段创建索引,提高查询速度。
四、外键约束外键约束用于建立两个表之间的关联关系,确保数据的引用完整性。
第5章完整性约束

第5章 数据完整性 章
5.1 数据完整性的基本概念 .
数据完整性包括实体完整性、域完整性、 数据完整性包括实体完整性、域完整性、参照完整性和 用户定义的完整性。 用户定义的完整性。 1.实体完整性(Entity Integrity) .实体完整性( ) 实体完整性用于保证数据库中数据表的每一个特定实体 都是唯一的。它可以通过主键约束( )、唯 都是唯一的。它可以通过主键约束(PRIMARY KEY)、唯 )、 一键约束( )、索引或标识属性 一键约束(UNIQUE)、索引或标识属性(IDENTITY)来 )、索引或标识属性( ) 实现。 实现。 2.域完整性 .域完整性(Domain Integrity) 域完整性就是保证数据库中的数据取值的合理性, 域完整性就是保证数据库中的数据取值的合理性,即保 证指定列的数据具有正确的数据类型、 证指定列的数据具有正确的数据类型、格式和有效的数据范 通过为表的列定义数据类型以及检查约束( 围。通过为表的列定义数据类型以及检查约束(CHECK)、 )、 默认定义(DEFAULT)、非空(NOT NULL)和规则实现 默认定义( )、非空( ) )、非空 限制数据范围,保证只有在有效范围内的值才能存储到列中。 限制数据范围,保证只有在有效范围内的值才能存储到列中。
1.利用Management Studio定义(删除)检查约束 .利用 定义( 定义 删除) 步骤1:右键要建立 约束的表选择“ 步骤 :右键要建立check约束的表选择“修改”。 约束的表选择 修改” 步骤2:在弹出的窗口中继续击右键选择“ 约束” 步骤 :在弹出的窗口中继续击右键选择“CHECK约束” 约束 步骤3:点击“添加” 名称”处设置约束的名称, 步骤 :点击“添加”,在“名称”处设置约束的名称, 表达式”中输入约束表达式( 在“表达式”中输入约束表达式(用字段名和条件运算符书 写)。 如成绩为0-100分: 成绩>=0 and 成绩<=100 如成绩为 分 成绩 成绩 步骤4:点击“关闭”,最后点击保存即可。 步骤:“表设计器”中的说明: 说明: 表设计器”中的说明: 说明 :点击“关闭” 最后点击保存即可。 a 强制用于 强制用于INSERT和UPDATE:插入和更新数据是否满 和 : 足要求。 足要求。 b 强制用于复制:复制数据是否满足要求。 强制用于复制:复制数据是否满足要求。 c 在创建或重新启用时检查现有数据:是否要求现有的数 在创建或重新启用时检查现有数据: 据满足要求。 据满足要求。
数据库技术中的数据完整性约束

数据库技术中的数据完整性约束引言数据的正确性和完整性是数据库管理系统中非常重要的方面之一。
为了确保数据能够正确且完整地存储和管理,数据库技术引入了数据完整性约束。
本文将探讨数据库技术中的数据完整性约束以及其在数据管理中的重要性。
1.数据完整性约束的定义数据完整性约束是指在数据库中对数据存储和更新操作时所强制的规则。
它们有助于确保数据的完整性,即保证数据的准确性、一致性和有效性。
通常,数据完整性约束分为五个方面,包括实体完整性、域完整性、参照完整性、用户定义完整性和触发完整性。
2.实体完整性实体完整性是指确保每个表中的每个记录都具有唯一的标识符。
在某些关系数据库管理系统中,可以通过将主键约束应用于表的主键列来实现实体完整性。
主键列的值必须是唯一的,并且不能为NULL。
3.域完整性域完整性是指对于每个属性,仅允许特定的数据类型、值范围和格式。
例如,一个员工表的年龄属性应该是一个正整数,而不是一个字符串或负数。
域完整性可以通过在表的列上应用数据类型、范围和格式约束来实现。
4.参照完整性参照完整性用于确保两个表之间的关系保持一致。
例如,一个订单表中的客户ID应该与一个客户表中的有效客户ID相对应。
参照完整性可以通过在表之间创建外键约束来实现。
外键约束要求在引用表中的列中的值必须在被引用的表的主键列中找到。
5.用户定义完整性用户定义完整性是指根据特定需求和业务规则来定义的数据完整性约束。
例如,一个电子邮件地址应该包含"@"符号。
用户定义完整性可以通过在列上应用自定义规则、触发器或存储过程来实现。
6.触发完整性触发完整性是指在数据操作(如插入、更新或删除)之前或之后自动执行的操作。
触发完整性可以用于强制执行数据完整性约束。
例如,当一个新的订单被插入时,可以触发一个触发器来确保订单中必填字段的值不为空。
总结数据完整性约束在数据库管理系统中是至关重要的。
它们确保数据的正确性、一致性和有效性,提高数据的质量和可靠性。
完整性约束

数据完整性是指数据库中存 储的数据是有意义的或正确的。 数据完整性约束主要包括三大类:
–实体完整性 –参照完整性 –用户定义的完整性。
➢
实体完整性
➢指的是关系数据库中的所有的表都必须有 主码,而且表中不允许存在如下的记录无 主码值的记录主码值相同的记录。
➢关系模型中使用主码作为记录的惟一标识, 主码所包含的属性称为关系的主属性,其 他的非主码属性称为非主属性。在关系数 据库中主属性不能取空值。
参照完整性
➢ 参照完整性有时也称为引用完整性。
➢
参照完整性是描述实体之间的联系
的。参照完整性一般是指多个实体或表之间
的关联关系。限制一个表中某列就称为
参照完整性。在关系数据库中用外码
(Foreign key,有时也称为外部关键字或
外键)来实现参照完整性。
参照完整性——外码
及格、不及格}。
➢ 课程(课程号,课程名,学分) ➢ 选课(学号,课程号,成绩)
3. 用户定义的完整性
用户定义的完整性也称为域完
整性或语义完整性。用户定义的完
整性实际上就是指明关系中属性的
取值范围,也就是属性的域,即限
制关系中的属性的取值类型及取值
范围。例如,学生的考试成绩的取
值范围为0~100,或取{优、良、中、
➢外码一般在联系实体中,用于表 示两个或多个实体之间的关联关 系。
➢例1:学生实体和专业实体可以用 下面的关系表示。 ➢学生(学号,姓名,性别,专 业号,出生日期) ➢专业(专业号,专业名)
参照完整性——外码
➢例2.学生、课程以及学生与课程之间的选 课关系可以用如下三个关系表示:
➢ 学生(学号,姓名,性别,专业号,出生 日期)
完整性约束

address varchar(80) NOT NULL,
postid varchar(6) NOT NULL,
passcardno varchar(20) NOT NULL,
PRIMARY KEY (cusid)
PRIMARY KEY (cusid)
)
例2.CREATE TABLE orders
( OrdID int not null,
CusID Varchar(20) not null,
ComID int not null,
IsAfirm varchar(1),
IsSendGoods varcahr(1),
)
唯一约束 UNIQUE
CREATE TABLE dbo.customer(
cusid varchar(20) NOT NULL,
cuspassword varchar(6) DEFAULT ‘888888’ NOT NULL,
)
Байду номын сангаас
PayAmount decimal (10, 2) NOT NULL,
PayWay varchar (50) NOT NULL,
DTime datetime NOT NULL,
IsAfirm varchar (1) NULL,
IsSendGoods varchar (1) NULL,
CREATE TABLE dbo.customer(
cusid varchar(20) NOT NULL,
cuspassword varchar(6) DEFAULT ‘888888’ NOT NULL,
完整性约束

1、域完整性约束域完整性(Domain Integrity)约束要求属性值必须取自其对应的值域;一个属性值能否为空值由其语义决定。
域完整性约束是最基本的约束。
2、实体完整件约束实体完整性(Entity Integrity)约束的规则是:主关键字值必须是唯一的,且任何组成部分都不能是空值。
这一规则的理论根据如下:由定义可知,任何元组必须是可辨识的。
在关系数据库中,主关键字起唯一的标识作用,如果一个标识项(主关键字)全都是空值,就起不到一个标识的作用。
这等于说有这样—些元组,它们并没有任何唯一的标识项,即不能和其他元组区别开来。
这是不允许的,因此主关键字不能全部为空值。
类似地分析表明,即使标识项的一部分是空值也是不能允许的。
3、参照完整件约束一个关系涉及对另一关系的引用是常有的事。
例如,选课关系经由它的属性学号和课程号,既涉及到对学生关系的引用,又涉及到对课程关系的引用。
很显然,如果选课关系的一个元组含有学号属性的某个值,比如说是“990027”,那么在学生关系中,学号为“990027”的学生元组就应该存在。
否则,选课关系的元组显然涉及到了一个并不存在的学生。
这是不允许的;对于课程情况也是如此。
为此,必须引入一定的参照完整性约束规则,不允许引用不存在的实体。
参照完整性(Referential Integrity)又称为引用完整性,其约束的规则是:设D是一个主域,R1是一个关系,它有一个在D上定义的属性A。
那么,在任何给定的时刻,R1中A的每个值或者是空值,或者等于以A为主关键字的某个关系R2中的一个主关键字值(R1和R2可以相同)。
主关键字和外来关键字提供了一种表示元组之间联系的手段。
外来关键字要么空缺,要么引用—个实际存在的主关键字。
一个给定的域被选择为主域当且仅当有一个单一属性的主关键字是在这个域上定义的。
但是要注意,不是所有能起这种“联系”作用的属性都是关键字。
例如,学生和教师之间有一个联系“年龄”,这个联系是由学生关系和教师关系的年龄属性表示的,但年龄并不是外来关键字。
第5章数据库完整性约束总结

第5章数据库完整性约束总结数据库完整性约束是指对数据库中数据的完整性进行约束和验证,从而保证数据的准确性和一致性。
在数据库设计和管理中,完整性约束是非常重要的一部分。
本文将总结数据库完整性约束的相关内容。
一、数据库完整性约束的概念数据库完整性是指对数据库中存储的数据进行约束,以保证数据的正确性和一致性。
完整性约束是通过规定一系列的规则和条件来限制数据的输入和修改,以保证数据的完整性。
常见的完整性约束有实体完整性、域完整性、参照完整性、用户定义完整性等。
1.实体完整性:是指每个表中的记录都有唯一的标识符,不允许重复记录的存在。
实体完整性可以通过设置主键来实现,主键是唯一标识一条记录的字段或字段组合。
2.域完整性:是指数据库中每个字段的取值必须满足指定的规则和约束。
数据类型、长度、有效性等都是域完整性的一部分。
3.参照完整性:是指在关系数据库中建立表之间的关系时,要求所有的外键引用必须是有效的,即引用的主键值必须存在。
参照完整性可以防止无效的外键引用和数据的不一致。
4.用户定义完整性:是指用户可以根据自己的需求定义一些完整性约束,例如检查一些字段值的范围、格式等。
二、实现数据库完整性约束的方法在数据库中,可以通过以下方法来实现完整性约束。
1.主键约束:主键是唯一标识一个实体的字段或字段组合,可以通过设置主键来实现实体完整性。
主键约束要求主键的值不能重复,可以通过唯一索引或者唯一约束来实现。
2.唯一约束:唯一约束是指一个字段的值不能重复,可通过唯一索引或者唯一约束来实现。
3.非空约束:非空约束是指一个字段的值不能为空,可以通过设置字段的默认值或者非空约束来实现。
4.外键约束:外键是指一个表中的字段引用了另一个表的主键,可以通过外键约束来实现参照完整性。
外键约束要求外键引用的主键值必须存在,可以通过设置级联删除或者设置为空来处理引用的主键删除或修改的情况。
5.检查约束:检查约束是指限制字段值的取值范围,可以通过设置字段的数据类型和长度来实现。
完整性约束——精选推荐

完整性约束⼀、实体完整性:是指保证表中所有的⾏唯⼀。
实体完整性要求表中的所有⾏都有⼀个唯⼀标识符。
这个唯⼀标识符可能是⼀列,也可能是⼏列的组合,称为主键。
也就是说,表中的主键在所有⾏上必须取唯⼀值。
强制实体完整性的⽅法有:索引、约束、PRIMARY KEY约束或IDENTITY属性。
如:stu表中sid(学号)的取值必须唯⼀,它唯⼀标识了相应记录所代表的学⽣,学号重复是⾮法的。
学⽣的姓名不能作为主键,因为完全可能存在两个学⽣同名同姓的情况。
1、主键(Primary Key):主键列的值不能为NULL,也不能重复创建表:定义列时指定主键:CREATE TABLE stu(sid CHAR(6) PRIMARY KEY,sname VARCHAR(20),age INT,gender VARCHAR(10));创建表:定义列之后独⽴指定主键:CREATE TABLE stu(sid CHAR(6),sname VARCHAR(20),age INT,gender VARCHAR(10),PRIMARY KEY(sid));修改表时指定主键:ALTER TABLE stu ADD PRIMARY KEY(sid);删除主键(只是删除主键约束,⽽不会删除主键列):ALTER TABLE stu DROP PRIMARY KEY;2、主键⾃增长MySQL提供了主键⾃动增长的功能!这样⽤户就不⽤再为是否有主键是否重复⽽烦恼了。
当主键设置为⾃动增长后,在没有给出主键值时,主键的值会⾃动⽣成,⽽且是最⼤主键值+1,也就不会出现重复主键的可能了。
创建表时设置主键⾃增长(主键必须是整型才可以⾃增长):CREATE TABLE stu(sid INT PRIMARY KEY AUTO_INCREMENT,sname VARCHAR(20),age INT,gender VARCHAR(10));修改表时设置主键⾃增长:ALTER TABLE stu CHANGE sid INT AUTO_INCREMENT;修改表时删除主键⾃增长:ALTER TABLE stu CHANGE sid INT;⼆、域完整性:是指⼀个列的输⼊有效性,是否允许为空值。
数据库设计理论及应用(1)——完整性约束

数据库设计理论及应用(1)——完整性约束作者:最后一只恐龙发表时间:2007-6-17该系列计划包括5部分:完整性约束理论及应用、范式理论及应用、需求分析、概念结构设计、逻辑结构设计。
本文是第一部分,介绍数据库理论的几个概念,以及数据库完整性约束的相关概念和应用。
1.数据库的几个概念(1) 实体(Entity):指客观存在并可相互区别的事物,一个实体在数据库中表现为表中的一条记录。
(2) 属性(Attribute):指实体所具有的某一特性,实体的属性在数据库中表现为表的字段。
(3) 码(Key):唯一标识实体的属性集。
我们认为实体都是可区别的,即通过码来区分,码包含一个或多个属性。
(4) 域(Domain):指属性的取值范围,如姓名域可以是长度小于20的字符串,性别域为{男,女}。
(5) 实体型(Entity Type):用实体名及其属性名集来抽象和刻画同类实体,称为实体型。
如:学生(学号,姓名,性别,入学时间),下划线表示该属性为码。
(6) 实体集(Entity Set):同型实体的集合,因为一条记录对应一个实体,那么实体集就是记录的集合,也就是表。
(7) 联系(Relationship):实体内部或实体之间的联系。
(这个概念实在不好定义,只好用“联系就是联系”这样的废话来说明了)。
2.关系数据库的定义定义1 关系(Relation):D1×D2×…×Dn的子集叫做在域D1, D2, …, Dn上的关系,表示为R(D1, D2, …, Dn)。
其中D1×D2×…×Dn是笛卡尔积。
用白话说,实体集在关系数据库中就称为关系,注意关系与联系两个概念的区别。
实体在关系数据库中成为元组。
关于关系的几点说明:(1) 若关系中某一属性组的值能唯一的标识一个元组,则称该属性组为候选码。
如学生关系中,学号和身份证号都可以作为候选码。
而选课(学号,课程号,成绩)这个关系中,学号和课程号合起来作为候选码。
《数据库技术与应用》第5章 习题答案

第5章数据库完整性与安全性1。
什么是数据库的完整性?什么是数据库的安全性?两者之间有什么区别和联系?解:数据库的完整性是指数据库中数据的正确性、有效性和相容性,其目的是防止不符合语义、不正确的数据进入数据库,从而来保证数据库系统能够真实的反映客观现实世界。
数据库安全性是指保护数据库,防止因用户非法使用数据库造成数据泄露、更改或破坏。
数据的完整性和安全性是两个不同的概念,但是有一定的联系:前者是为了防止数据库中存在不符合语义的数据,防止错误信息的输入和输出,即所谓垃圾进垃圾出所造成的无效操作和错误结果。
后者是保护数据库防止恶意的破坏和非法的存取.也就是说,安全性措施的防范对象是非法用户和非法操作,完整性措施的防范对象是不合语义的数据。
2。
什么是数据库的完整性约束条件?完整性约束条件可以分为哪几类?解:完整性约束条件是指数据库中的数据应该满足的语义约束条件。
一般可以分为六类:静态列级约束、静态元组约束、静态关系约束、动态列级约束、动态元组约束、动态关系约束。
静态列级约束是对一个列的取值域的说明,包括以下几个方面:①数据类型的约束,包括数据的类型、长度、单位、精度等;②对数据格式的约束;③对取值范围或取值集合的约束;④对空值的约束;⑤其他约束。
静态元组约束就是规定组成一个元组的各个列之间的约束关系,静态元组约束只局限在单个元组上。
静态关系约束是在一个关系的各个元组之间或者若干关系之间常常存在各种联系或约束.常见的静态关系约束有:①实体完整性约束;②参照完整性约束;③函数依赖约束。
动态列级约束是修改列定义或列值时应满足的约束条件,包括下面两方面:①修改列定义时的约束;②修改列值时的约束。
动态元组约束是指修改某个元组的值时需要参照其旧值,并且新旧值之间需要满足某种约束条件。
动态关系约束是加在关系变化前后状态上的限制条件,例如事务一致性、原子性等约束条件。
3. 试述DBMS如何实现完整性控制。
解:为了维护数据库的完整性,DBMS提供了以下三种机制:①完整性约束条件定义完整性约束条件也称为完整性规则,是数据库中的数据必须满足的语义约束条件.SQL标准使用了一系列概念来描述完整性,包括关系模型的实体完整性、参照完整性和用户定义完整性。
关系模型的完整性约束

关系模型的完整性约束⼀,定义定义关系完整性是为保证数据库中数据的正确性和相容性,对关系模型提出的某种约束条件或规则。
完整性通常包括域完整性,实体完整性、参照完整性和⽤户定义完整性,其中域完整性,实体完整性和参照完整性,是关系模型必须满⾜的完整性约束条件。
⼆,域完整性约束域完整性是保证数据库字段取值的合理性。
属性值应是域中的值,这是关系模式规定了的。
除此之外,⼀个属性能否为NULL,这是由语义决定的,也是域完整性约束的主要内容。
域完整性约束 (Integrity constrains)是最简单、最基本的约束。
在当今的关系DBMS中,⼀般都有域完整性约束检查功能。
包括主键(PRIMARY KEY)、检查(CHECK)、默认值(DEFAULT)、唯⼀(UNIQUE)、不为空(NOT NULL)、外键(FOREIGN KEY)等约束。
三,实体完整性约束实体完整性(Entity integrity)是指关系的主关键字不能重复也不能取“空值"。
⼀个关系对应现实世界中⼀个实体集。
现实世界中的实体是可以相互区分、识别的,也即它们应具有某种惟⼀性标识。
在关系模式中,以主关键字作为惟⼀性标识,⽽主关键字中的属性(称为主属性)不能取空值,否则,表明关系模式中存在着不可标识的实体(因空值是“不确定\"的),这与现实世界的实际情况相⽭盾,这样的实体就不是⼀个完整实体。
按实体完整性规则要求,主属性不得取空值,如主关键字是多个属性的组合,则所有主属性均不得取空值。
如表1.1将编号作为主关键字,那么,该列不得有空值,否则⽆法对应某个具体的职⼯,这样的表格不完整,对应关系不符合实体完整性规则的约束条件。
四,参照完整性约束参照完整性(Referential Iintigrity)是定义建⽴关系之间联系的主关键字与外部关键字引⽤的约束条件。
参照完整性主要指主表不能任意删除或修改,从表不能任意添加。
关系数据库中通常都包含多个存在相互联系的关系,关系与关系之间的联系是通过公共属性来实现的。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2. 过程型数据完整性
过程型数据完整性是指由某个过程引发而实施的数据完整性。 一般先写出实施数据完整性的条件,再写出强制该条件所执行 的用于保证数据完整性的脚本。通常由触发器和存储过程实现。 过程型数据完整性也可以在客户机和服务器上使用其它编程语 言和工具实现。
[(ref_column) ] | DEFAULT constant_expression | CHECK(logical_expression)} ] [,...n] )
7
其中: table_name:创建约束所在的表的名称。 column_name:列名。 data_type:数据类型。 constraint_name:约束名。 在创建、修改、实现约束时注意以下几点:
① 可以在已有的表上创建、修改、删除约束,而不必删 除并重建表。
② 可以在应用程序中创建错误检查逻辑,测试是否违反 约束。
③ 在给表添加约束时,SQL将验证表中已有数据是否满 足正在添加的约束。
8
⑵ 缺省约束 缺省约束是指当向数据库中的表插入数据时,如果用户
没有明确给出某列的值时,SQL Server自动为该列输入 的考虑以下因素: DEFAULT约束只能用于INSERT语句 不能用于具有IDENTITY属性的列 每列只能有一个DEFAULT约束 【例1】 为数据库JWGL中表teacher的SEX(性别)字段 创建一个缺省约束,缺省值为1(男) USE JWGL GO ALTER TABLE teacher ADD CONSTRAINT default_sex DEFAULT 1 FOR SEX
唯一约束、外键约束(参照约束)。 非空约束(NOT NULL):表中的某些列必须存在有效值,不允
许有空值出现。这是最简单的数据完整性约束,可在建表时将该 列声明为NOT NULL即可。 缺省约束(DEFALUT CONSTRAINTS):当向数据库中的表插 入数据时,如果用户没有明确给出某列的值,SQL Server自动为 该列输入指定值。
CREATE TABLE table_name (column_name data_type [[CONSTRAINT constraint_name] {PRIMARY KEY [CLUSTERED | NONCLUSTERED] | UNIQUE [CLUSTERED | NONCLUSTERED] | [FOREIGN KEY] REFERENCES ref_table
5.4 数据完整性的概念与实施方法
5.4.1 数据完整性概念 数据完整性是指数据的正确性、完备性和一致性,是
衡量数据库质量好坏的重要标准。 在用INSERT、DELETE、UPDATE语句修改数据库内容
时,数据的完整性可能会遭到破坏。可能会存在下列 情况:无效的数据被添加到数据库的表中。如:将学 生考试成绩输入成负数; SQL Server提供了对数据库中表、列实施数据完整性 的方法。对表进行设计数据完整性有两个重要内容: 标识列的有效值和确定如何强制列中的数据完整性。
索引,也可以是非聚簇索引,默认是聚簇索引。 【例3】 将数据库JWGL中teacher表的teacher_id(教师号)字段设为主
键。 USE JWGL GO ALTER TABLE teacher ADD CONSTRAINT PK_teacher_id PRIMARY KEY clustered (teacher_id)
5
不同的约束强制不同类型的数据完整性。表 中 给出了两者的对应关系。
完整性类型 域完整性
实体完整性 参照完整性
约束类型 非空约束 DEFAULT CHECK PRIMARY KEY UNIQUE FOREIGN KEY
6
2.使用T-SQL语言创建、管理约束 (1)使用CREATE TABLE语句创建约束 使用CREATE TABLE语句创建约束的一般语法如下:
3
5.4.3 约束
1.约束的定义和类型 约束是SQL Server提供的自动保持数据库完整性的一种方法 。 列级约束:列级约束是行定义的一部分,只能够应用在一列上。 表级约束:表级约束的定义独立于列的定义,可以应用在一个表
中的多列上。 约束有六种类型:非空约束、缺省约束、检查约束、主键约束、
创建检查约束
创建主键约束 创建唯一性约束
创建外键约束
15
5.4.4 使用默认值 1. 默认值的定义 默认值是数据库对象之一,它指定在向数据库中的表插入数
据时,如果用户没有明确给出某列的值,SQL Server自动为 该列使用此默认值。 它是实现数据完整性的方法之一。在关系数据库中,每个列 都必须包含有值,即使这个值是个空值。对于不接受空值的 列,就必须为该列输入某个非空值,要么由用户明确输入, 要么由SQL Server输入默认值。 默认值可用于表中的列和用户定义数据类型。请注意,缺省 约束中使用的缺省值可以由用户创建时输入,也可以通过绑 定已创建的默认值来指定。 在创建默认值时,请考虑以下几点: 默认值需和它要绑定的列或用户定义数据类型具有相同的
默认值创建后,可以使用系统存储过程sp_helptext可 以查看用于定义一个默认值的SQL脚本。其语法是:
4
检查约束(CHECK CONSTRAINTS):限制插入列中 的值的范围。
主键约束(PRIMARY KEY CONSTRAINTS):要求主 键的列上没有两行具有相同值,也没有空值。
唯一约束(UNIQUE CONSTRAINTS):要求表中所有 行在指定的列上没有完全相同的列值。
外键约束(FROEIGN KEY CONSTRAINTS):要求正 被插入或更新的列(外键)的新值,必须在被参照表 (主表)的相应列(主键)中已经存在。
14
3. 使用企业管理器管理约束
创建缺省约束 创建缺省约束的具体步骤如下: ① 启动企业管理器。 ② 分别点击“数据库”、“JWGL”、“表”,显示数据库 JWGL中所有的表。 ③ 右击要设置缺省的表(假设要设置缺省的表为teacher), 在系统弹出的快捷菜单上点击“设计表”, ④ 点击设置缺省的列,在下面列属性设置栏的默认值输入 框中,输入对应缺省值即可。
1
1. 域完整性
域完整性是指一个列的输入有效性,是否允许空值。强制域完 整性的方法有:限制类型(通过设定列的数据类型)、格式 (通过CHECK约束和规则)或可能值的范围(通过 FOREIGN KEY 约束、CHECK 约束、DEFAULT定义、NOT NULL定义和 规则)。
2. 实体完整性
实体完整性是指保证表中所有的行唯一。实体完整性要求表中 的所有行都有一个唯一标识符。这个唯一标识符可能是一列, 也可能是几列的组合,称之为主键。也就是说,表中主键在所 有行上必须取值唯一。强制实体完整性的方法有:索引、 UNIQUE约束、PRIMARY KEY约束或 IDENTITY属性 。
11
⑸ 唯一约束 唯一约束限制表中指定列上所有的非空值必须唯一,
即表中任意两行在指定列上都不允许有相同的值。 创建UNIQUE约束时应考虑以下因素:
一个表可以放置多个UNIQUE约束 允许有空值 创建唯一索引时强制UNIQUE约束
【例4】 将数据库JWGL中teacher表的teacher_id(教师 号)字段设为唯一约束。
数据类型。 默认值需符合该列的所有规则。 默认值缺省还需符合所有CHECK约束。 创建、管理默认值可以用T-SQL语言也可以用企业管理器
16
2. 使用T-SQL语言创建默认值:
⑴ 创建默认值的语法
CREATE DEFAULT default_name AS constant_expression
⑹ 外键约束 通过外键约束强制参照完整性。SQL Server提供了外键/主
键值约束。即满足以下两点: ① 存在外键时,被参照表中这一行不能删除。 ② 向子表插入记录或更新子表中外键值的前提是,必须保
证这个外键值与主表中主键的某个值相等或者该外键值为 空,否则不允许插入或修改外键值。
13
创建FOREIGN KEY约束时应考虑以下因素: 它提供一列或多列数据的参照完整性。 FOREIGN KEY约束不自动创建索引。但如果考虑数据库的 多表连接,建议为外键创建一个索引,以提高连接性能 主键与外键的数据类型和长度必须一致,或系统可转换
这里:
default_name:新建默认值的名称,它必须遵循SQL Server标识符的命名规则。
constant_expression:默认值default_name的值, 是一个常数表达式,在这个表达式中不能含有任何列 名或其他数据库对象名,但可使用不涉及数据库对象 的SQL Server内部函数。
【例2】 为数据库JWGL中表student_course 的GRADE(成绩) 字段创建一个检查约束,使得GRADE的值在0-100之间。 USE JWGL GO ALTER TABLE student_course ADD CONSTRAINT check_grade CHECK (grade>=0 and grade<=100)
10
⑷ 主键约束 主键约束保证某一列或一组列值的组合相对于表中的每一行都是唯一的,
主键约束创建在表的主键列上,它对实现实体完整性更加有用。主键约 束的作用就是为表创建主键。 创建PRIMARY KEY约束时应考虑以下因素: 每个表只能有一个主键,并且必须有一个主键 ; 不允许有空值; 参照约束使用它作为维护参照完整性的参考点; 创建主键时,在创建主键的列上创建了一个唯一索引,可以是聚簇
【例5】为表teacher创建外键department_id,外键 department_id参考表department中的主键department_id。 USE JWGL GO ALTER TABLE teacher ADD CONSTRAINT FK_department_id FOREIGN KEY (department_id) REFERENCES department(department_id) GO