chp5.4_完整性约束命名(简)

合集下载

完整性约束

完整性约束
– 触发器事件
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、实体完整性约束:表中的每⼀⾏数据都反映不同的实体,不能存在相同的数据⾏.通过索引.唯⼀约束,主键约束或标识列属性,可以⽤来实现表的实体完整性.索引:将⽂献中具有检索意义的事项(可以是⼈名、地名、词语、概念、或其他事项)按照⼀定⽅式有序编排起来,以供检索的⼯具书。

 数据库索引好⽐是⼀本书前⾯的⽬录,能加快数据库的查询速度。

例如这样⼀个查询:select * from table1 where id=44。

如果没有索引,必须遍历整个表,直到ID等于44的这⼀⾏被找到为⽌;有了索引之后(必须是在ID这⼀列上建⽴的索引),直接在索引⾥⾯找44(也就是在ID这⼀列找),就可以得知这⼀⾏的位置,也就是找到了这⼀⾏。

可见,索引是⽤来定位的。

唯⼀约束:⽐如⼀张表的学⽣姓名设置了唯⼀约束,那么学⽣的姓名就是不能重复的,只能是唯⼀的唯⼀约束保证在⼀个字段或者⼀组字段⾥地数据与表中其它⾏的数据相⽐是唯⼀的附上与主键约束的区别,以更好理解创建唯⼀约束可确保在未参与主键的特定列中不输⼊重复值。

尽管唯⼀约束和主键都强制唯⼀性,但如果情况如下,则应向表附加唯⼀约束⽽不是主键约束:希望在某⼀列或某⼀组列中强制唯⼀性。

您可以向表附加多个唯⼀约束,但只能向表附加⼀个主键约束。

希望在允许空值的列中强制唯⼀性。

您可以向允许空值的列附加唯⼀约束,但只能向不允许空值的列附加主键约束。

当向允许空值的列附加唯⼀约束时,请确保在所约束的列中最多只有⼀⾏包含空值。

2、域完整性约束:指给定列的输⼊有效性通过限制数据类型,检查约束,输⼊格式,外键约束,默认值,⾮空约束等多种⽅法,可以⽤来实现表的域完整性.3、参照完整性约束:在输⼊或删除数据⾏时,引⽤完性约束⽤来保持表之间已定义的关系4:、⽤户定义的完整性约束:⽤来定义特定的规则,例如,向⽤户信息表中插⼊⼀个⽤户记录时,要求通过⾝份证编号来检查另外⼀个数据库中是否存在该⽤户,并且该⽤户的信誉度是否满⾜要求等.如果不满⾜要求则不能够插⼊,这个时候就需要使⽤数据库的规则存储过程或者触发器来进⾏约束。

第五章-完整性约束

第五章-完整性约束

第五章-完整性约束⽬录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) -- 定义表级参照完整性);参照完整性检查如你所知,参照完整性将两个表中相应的元组联系起来。

关系模型的三类完整性约束

关系模型的三类完整性约束

关系模型的三类完整性约束关系模型的三类完整性约束1 数据的完整性约束是用来确保数据的准确性和一致性。

数据的完整性就是对数据的准确性和一致性的一种保证。

数据完整性(Data Integrity)是指数据的精确(Accuracy)和可靠性(Reliability)。

分为以下四类:1 实体完整性:规定表的每一行在表中是惟一的实体。

2 域完整性:是指表中的列必须满足某种特定的数据类型约束,其中约束又包括取值范围、精度等规定。

3 参照完整性:是指两个表的主关键字和外关键字的数据应一致,保证了表之间的数据的一致性,防止了数据丢失或无意义的数据在数据库中扩散。

4 用户定义的完整性:不同的关系数据库系统根据其应用环境的不同,往往还需要一些特殊的约束条件。

用户定义的完整性即是针对某个特定关系数据库的约束条件,它反映某一具体应用必须满足的语义要求。

2 完整性约束的类型:可分为三种类型:与表有关的约束、域(Domain)约束、断言(Assertion) 1 与表有关的约束: 是表中定义的一种约束。

可在列定义时定义该约束,此时称为列约束,也可以在表定义时定义约束,此时称为表约束。

2 域(Domain)约束:在域定义中被定义的一种约束,它与在特定域中定义的任何列都有关系。

3 断言(Assertion):在断言定义时定义的一种约束,它可以与一个或多个表进行关联。

一、与表有关的约束:包括列约束(表约束+NOT NULL)和表约束(PRIMARY KEY、foreign key、check、UNIQUE) 。

(1) not null(非空)约束:只用于定义列约束。

语法如下:Colunm_name datatype | domain not null实例:create table Employee(emp_id int not null,emp_name varchar(10) notnull,address varchar(40) ,)创建之后,如果往表Employee表中非空约束中插入空值,insert into Employeevalues(1,null,'neimeng')将会出错。

第5章 完整性约束定义

第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提供的自动保持数据库完整性的一种方法 。


列级约束:列级约束是行定义的一部分,只能够应用在一列上。
表级约束:表级约束的定义独立于列的定义,可以应用在一个表 中的多列上。

Oracle数据库的完整性约束和序列规则详解

Oracle数据库的完整性约束和序列规则详解

Oracle数据库的完整性约束规则详解完整性约束用于增强数据的完整性,Oracle提供了5种完整性约束:完整性约束是一种规则,不占用任何数据库空间。

完整性约束存在数据字典中,在执行SQL或PL/SQL期间使用。

用户可以指明约束是启用的还是禁用的,当约束启用时,他增强了数据的完整性,否则,则反之,但约束始终存在于数据字典中。

禁用约束,使用ALTER语句:或如果要重新启用约束:删除约束:或Check 约束在数据列上Check 约束需要一个特殊的布尔条件或者将数据列设置成TRUE,至少一个数据列的值是NULL,Check约束用于增强表中数据内容的简单的商业规则。

用户使用Check约束保证数据规则的一致性。

Check约束可以涉及该行同属Check约束的其他数据列但不能涉及其他行或其他表,或调用函数SYSDATE, UID,USER,USERENV。

如果用户的商业规则需要这类的数据检查,那么可以使用触发器。

Check约束不保护LOB数据类型的数据列和对象、嵌套表、VARRY、ref等。

单一数据列可以有多个Check约束保护,一个Check约束可以保护多个数据列。

创建表的Check约束使用CREATE TABLE语句,更改表的约束使用ALTER TABLE语句。

语法:Check约束可以被创建或增加为一个表约束,当Check约束保护多个数据列时,必须使用表约束语法。

约束名是可选的并且如果这个名字不存在,那么oracle将产生一个以SYS_开始的唯一的名字。

例:NOT NULL约束NOT NULL约束应用在单一的数据列上,并且他保护的数据列必须要有数据值。

缺省状况下,ORACLE允许任何列都可以有NULL值。

某些商业规则要求某数据列必须要有值,NOT NULL约束将确保该列的所有数据行都有值。

例:对于NOT NULL的ALTER TABLE语句与其他约束稍微有点不同。

唯一性约束(Unique constraint)唯一性约束可以保护表中多个数据列,保证在保护的数据列中任何两行的数据都不相同。

数据库完整性约束

数据库完整性约束

数据库完整性约束原创数据库完整性约束分为三种:实体完整性约束、参照完整性约束、⽤户定义的完整性实体完整性规则:若属性(指⼀个或⼀组属性)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) //在表级定义主码)实体完整性检查:检查主码值是否唯⼀,如果不唯⼀则拒绝插⼊或修改。

检查主码的各个属性是否为空,只有有⼀个为空就拒绝插⼊或修改。

实验四

实验四

实验4 数据库约束实验实验学时:2实验要求:必做实验目的:熟练掌握数据库约束的三个完整性规则:实体完整性约束、参照完整性约束、用户定义的完整性约束。

实验内容:1.实体完整性约束实体完整性规则(Entity Integrity Rule)是指关系的主属性不能取空值,即主键和候选键在关系中所对应的属性都不能取空值。

MySQL中实体完整性就是通过主键约束和候选键约束来实现的。

(1)定义主键约束在表中某个字段定义后加上关键字PRIMARY KEY即可。

Navicat操作:在主键属性的最后一列,添加“主键”。

命令行操作:添加表格的时候,属性这一栏之后加primary key.如:studentNo char(10) PRIMARY KEY。

(2)完整性约束的命名与数据库中的表一样,可以对完整性约束进行添加、删除和修改等操作。

首先需要在定义约束时对其进行命名,命名完整性约束的方法是,在各种完整性约束的定义说明之前加关键字CONSTRAINT和该约束的名字,语法格式如下:CONSTRAINT<symbol>{PRIMARY KEY (主键字段列表)|UNIQUE (候选键字段列表)| FOREIGN KEY (外键字段列表) REFERENCES tb_被参照关系(主键字段列表)|CHECK(约束条件表达式)};说明:symbol为指定的约束名字,必须是唯一的,默认MySQL会自动创建一个约束名字。

(3)候选键约束与主键一样,候选键可以是表中的某一列,也可以是表中某些列构成的一个组合。

任何时候,候选键的值必须是唯一的,且不能为NULL,候选键可在CREATETABLE或ALTER TABLE语句中使用关键字UNIQUE来定义,实现方法与主键类似。

如:创建班级表Create Table COURSE(Cno VARCHAR(8) Primary Key,Cname Varchar(30) Not Null Unique,Tno Varchar(8));或者直接放在所有字段之后:CONSTRAINT COURSE UNIQUE(Cname)。

完整性约束

完整性约束

数据库的完整性约束通过数据库提供的完整性约束,可以使数据库中的数据更加合理,提供安全性保证。

数据约束:主键约束: pk非空约束: notnull唯一性约束: ukcheck 约束: ck表的约束外键约束: fk主键约束:PRIMARY KEY被限定为主键约束的字段保证字段内容不为NULL,并且字段内容不能重复。

一般情况下,每张表中都会有一个主键约束,而且只能有一个。

方式一(列级约束, 在字段定义之后用约束关键字直接修饰):CREATE TABLE 表名( 字段1 类型[default ‘默认值’] PRIMARY KEY,字段2 类型,….)方式二(表级约束,在所有字段定义完之后通过constraint 关键字来指定约束):CREATE TABLE 表名( 字段1 类型,字段2 类型,字段n 类型,constraint 约束名字PRIMARY KEY(字段名),constraint 约束名字PRIMARY KEY(字段名1,字段2…))联合主键: 多个字段联合构成主键约束要求联合主键约束的多个字段每个字段都不为NULL,并且多个字段的内容不能同时相等。

表级约束比列级约束好,当违反约束时,表级约束会将约束名显示出来(约束名是由用户自己起的) 列级约束也会将约束名显示出来(约束名是由系统分配的)非空约束:NOT NULL注意:非空约束只能通过列级约束创建同一个表中非空约束可以有多个。

指定非空约束的字段内容可以重复。

CREATE TABLE 表名( 字段名 1 类型NOTNULL,字段名 2 类型NOT NULL,)唯一性约束:UNIQUE即可以通过表级约束来创建也可以通过列级约束来创建一张表中,可以将多个字段设置为唯一性约束唯一性约束只能约束该字段不重复,不能约束该字段是否为NULL如果想使字段不重复并且不为NULLCREATE TABLE 表名( 字段名 1 类型not null unique,列级约束:CREATE TABLE 表名( 字段名1 类型unique,字段名2 类型unique,…)表级约束:CREATE TABLE 表名( 字段名1 类型,字段名2 类型,constraint 约束名unique(字段名));检查约束:check()可以实现对表中字段内容的限制(取值范围大小等)可以出现在表级约束,也可以出现在列级约束CREATE TABLE 表名( 字段名1 类型check(字段名>=100),字段名2 类型,…)在check ( 可以是比较运算符, 函数,特殊符号等去修改该字段)一张表可以指定多个字段为check 约束外键约束:foreign key通过外键约束可以约束两张表通过在一张表中定义一个外键来引用其它表中的主键或唯一键,这种方式成为主外键约束。

完整性约束

完整性约束

完整性约束完整性约束实验实验目的:熟悉通过SQL对数据库进行操作完整性控制,包括三类完整性、check短语、constrain 子句。

1.实体完整性定义表的主码关系模型的实体完整性在create table中用primary key定义。

定义主码的方法为定义列级约束条件和定义为表级约束条件两种。

(1)定义表student,并将其中的sno属性定义为主码。

Create table student(Sno char(7) primary key,Sname char(8) not null,Ssex char(2),Sage smallint,Sdept char(20));或者:Create table student(Sno char(7),Sname char(8) not null,Ssex char(2),Sage smallint,Sdept char(20),Primary key(sno));(2)定义表course,并将其中的cno属性定义为主码。

Create table course(cno char(7) primary key,cname char(8) not null);2.参照完整性关系模型的参照完整性是在create table中用foreign key语句来定义的,并用references 来指明外码参照的是哪些表的主码。

定义表sc,其中sno参照student表的主码sno,cno参照course的主码cno。

Create table sc(Sno char(7) not null,Cno char(7) not null,Grade smallint,Primary key(sno,cno),Foreign key(sno) references student(sno),Foreign key(cno) references course(cno))3.用户自定义完整性用户定义的属性上的约束条件。

第5章完整性约束

第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.触发完整性触发完整性是指在数据操作(如插入、更新或删除)之前或之后自动执行的操作。

触发完整性可以用于强制执行数据完整性约束。

例如,当一个新的订单被插入时,可以触发一个触发器来确保订单中必填字段的值不为空。

总结数据完整性约束在数据库管理系统中是至关重要的。

它们确保数据的正确性、一致性和有效性,提高数据的质量和可靠性。

数据库—数据完整性约束

数据库—数据完整性约束

数据库—数据完整性约束
⼀、概念
数据完整性:存储在数据库中的所有数据值均正确的状态。

完整性约束:防⽌不符合规范的数据进⼊数据库,在⽤户对数据进⾏插⼊、修改、删除等操作时,DBMS⾃动按照⼀定的约束条件对数据进⾏监测,使不符合规范的数据不能进⼊数据库,以确保数据库中存储的数据正确、有效、相容。

⼆、分类
1. 实体完整性(实体完整性是对主键的约束,简单来说就是主键不能重复也不能为空)。

2. 域完整性(域完整性是对数据表中字段属性的约束,即数据的有效性,包括字段的类型,值域,字段是否符合有效规则等。


3. 参照完整性(参照完整性是对外键的约束。

准确地说,参照完整性是指关系中的外键必须是另⼀个关系的主键有效值,或者是NULL。

参考完整性维护表间数据的有效性,完整性,通常通过建⽴外部键联系另⼀表的主键实现,还可以⽤触发器来维护参考完整性)
4. ⽤户定义的完整性。

约束是表级的强制规定,有以下五中:not null ⾮空,unique 主键,primary key 主关键字段,foreign key 外键,check 限制列中的值的范围。

完整性约束

完整性约束
telephoneno varchar(12) NOT NULL,
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,

数据库系统概论-高等教育出版社 (9)

数据库系统概论-高等教育出版社 (9)
定义为列级约束条件 定义为表级约束条件 定义为表级约束条件
二、实体完整性检查和违约处理
实体完整性定义
[例1] 将Student表中的Sno属性定义为码
在列级定义主码
CREATE TABLE Student (Sno CHAR(9) PRIMARY KEY, Sname CHAR(20) NOT NULL, Ssex CHAR(2) , Sage SMALLINT, Sdept CHAR(20))
在Student表上建立了5个约束条件,包括主码约束(命名为StudentKey)以及 C1、C2、C3、C4四个列级约束。
完整性约束命名子句(续)
[例11] 建立教师表teacher,要求每个教师的应发工资不低于3000。
CREATE TABLE teacher (Eno NUMERIC(4) primary key, Ename CHAR(10) , Job char(8), Sal numeric(7,2), Deduct numeric(7,2), Deptno numeric(2), CONSTRAINT EMPFKey foreign key(Deptno) references DEPT(Deptno), CONSTRAINT C1 check(sal+deduct>=3000) )
5.3.4 元组上的约束条件检查和违约处理
插入元组或修改属性的值时,RDBMS检查元组上的约束条
件是否被满足
如果不满足则操作被拒绝执行
5.4 完整性约束命名子句
灵活的增加、删除完整性约束条件 1、CONSTRAINT 约束
CONSTRAINT <完整性约束条件名>
例10 例11
[PRIMARY KEY短语 |FOREIGN KEY短语 |CHECK短语]

数据库 第4章 完整性约束

数据库 第4章 完整性约束

4.3 完整性约束的定义
【例4-13】 CREATE TABLE RecipeDetail{ Rno VARCHAR(10), Mno VARCHAR(10) NOT NULL, Mamount DECIMAL(18,0), PRIMARY KEY(Rno,Mno), CHECK (Mno IN (SELECT Mno FROM medicine)) }
dept(DeptName)
4.3 完整性约束的定义
在一个关系中,PRIMARY KEY只有一个,而UNIQUE 可以声明多个
PRIMARY KEY要求属性取值不能为NULL,而UNIQUE 允许属性取空值,允许多个空值同时存在
在定义了UNIQUE,PRIMARY KEY 约束的属性上建 立索引是十分必要的,它可以使约束的检查执行 起来更有效
4.3 完整性约束的定义
4.3.4 CHECK约束
【例4-8】 CREATE TABLE Doctor{ Dno VARCHAR(10), Dname VARCHAR(50) NOT NULL, Dsex VARCHAR(2), Dage INT, Ddeptno VARCHAR(10), Dlevel VARCHAR(50), Dsalary decimal(18,2), PRIMARY KEY(Dno), CHECK( Dsex IN ('男', '女')) }
4.1 数据库完整性概述
数据的完整性和安全性是两个不同的概念
➢ 数据的完整性是为了防止数据库中存在不符合语义 的数据,防止错误数据的输入和输出所造成的无效 操作和错误结果。
➢ 数据的安全性是防止非法用户的非法操作所造成的 对数据库的恶意破坏。
4.1 数据库完整性概述
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

5.4 完整性约束命名子句
使用sp_help SC 查看SC表的信息 使用sp_helpconstraint SC 查看SC表中约束的信息
在create table语句中,用CONSTRAINT 子句给约束命名
CONSTRAINT <完整性约束条件名> [PRIMARY KEY短语 | FOREIGN KEY短语 | CHECK短语]
An Introduction to Database System
元组上的约束条件的定义(续 元组上的约束条件的定义 续)
[例9] 当学生的性别是男时,其名字不能以Ms.打头。
CREATE TABLE Student (Sno CHAR(9), Sname CHAR(8) NOT NULL, Ssex CHAR(2), Sage SMALLINT, Sdept CHAR(20), PRIMARY KEY (Sno), CHECK (Ssex='女' OR Sname NOT LIKE 'Ms.%') 女 /*定义了元组中Sname和 Ssex两个属性值之间的约束条件*/ ); 性别是女性的元组都能通过该项检查,因为Ssex=‘女’成立; 当性别是男性时,要通过检查则名字一定不能以Ms.打头
An Introduction to Database System
实体完整性定义(续 实体完整性定义 续)
[例2]将SC表中的Sno,Cno属性组定义为码
CREATE TABLE SC (Sno CHAR(9) NOT NULL, Cno CHAR(4) NOT NULL, Grade SMALLINT, /*只能在表级定义主码*/
触发器
触发器(Trigger)是用户定义在关系表上的一类 由事件驱动的特殊过程
由服务器自动激活 可以进行更为复杂的检查和操作,具有更精细和更强 大的数据控制能力
SQL Server触发器语法与教材上的不同。
An Introduction to Database System
An Introduction to Database System
完整性约束命名子句(续 完整性约束命名子句 续)
[例13] 修改表Student中的约束条件,要求学号改为在 900000~999999之间,年龄由小于30改为小于40 先删除原来的约束条件,再增加新的约束条件
ALTER TABLE Student DROP CONSTRAINT C1; ALTER TABLE Student ADD CONSTRAINT C1 CHECK (Sno BETWEEN 900000 AND 999999); ALTER TABLE Student DROP CONSTRAINT C3; ALTER TABLE Student ADD CONSTRAINT C3 CHECK (Sage < 40);
An Introduction to Database System
完整性约束命名子句(续 完整性约束命名子句 续)
[例10] 建立学生登记表Student,要求学号在90000~99999之间,姓 名不能取空值,年龄小于30,性别只能是“男”或“女”。 CREATE TABLE Student (Sno NUMERIC(6) CONSTRAINT C1 CHECK (Sno BETWEEN 90000 AND 99999), Sname CHAR(20) CONSTRAINT C2 NOT NULL, Sage NUMERIC(3) CONSTRAINT C3 CHECK (Sage < 30), Ssex CHAR(2) CONSTRAINT C4 CHECK (Ssex IN ( ‘男’,‘女’)), CONSTRAINT StudentKey PRIMARY KEY(Sno) );
PRIMARY KEY (Sno,Cno) );
An Introduction to Database System
参照完整性定义(续 参照完整性定义 续)
例如: 关系SC中,(Sno,Cno)是主码。Sno,Cno分别参照 Student表的主码和Course表的主码 [例3] 定义SC中的参照完整性 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 Course(Cno) /*在表级定义参照完整性*/ );
数据库系统概论
An Introduction to Database System
第五章 数据库完整性
中国人民大学信息学院
An Introduction to Database System
数据库完整性
数据库的完整性
数据的正确性和相容性
数据的完整性和安全性是两个不同概念
数据的完整性
防止数据库中存在不符合语义的数据,也就是防止数据库中存在不正确的数据 防范对象:不合语义的、不正确的数据
An Introduction to Database System
实体完整性定义(续 实体完整性定义 续)
(2)在表级定义主码 在表级定义主码
CREATE TABLE Student (Sno CHAR(9), Sname CHAR(20) NOT NULL, Ssex CHAR(2) , Sage SMALLINT, Sdept CHAR(20), PRIMARY KEY (Sno) );
属性上的约束条件的定义(续 属性上的约束条件的定义 续)
1.不允许取空值
[例5] 在定义SC表时,说明Sno、Cno、Grade属性不允许取空值。 CREATE TABLE SC (Sno CHAR(9) NOT NULL, Cno CHAR(4) NOT NULL, Grade SMALLINT NOT NULL, PRIMARY KEY (Sno, Cno), /* 如果在表级定义实体完整性,隐含了Sno,Cno不允许取空值, 则在列级不允许取空值的定义就不必写了 * / …… );
An Introduction to Database System
第五章 数据库完整性
5.1 实体完整性 5.2 参照完整性 5.3 用户定义的完整性 5.4 完整性约束命名字句 *5.5 域中的完整性限制 5.6 触发器 5.7 小结
An Introduction to Database System
An Introduction to Database System
第五章 数据库完整性
5.1 实体完整性 5.2 参照完整性 5.3 用户定义的完整性 5.4 完整性约束命名子句 *5.5 域中的完整性限制 5.6 触发器 5.7 小结
An Introduction to Database System
对多个属性构成的码只有一种定义方法
定义为表级约束条件
An Introduction to Database System
实体完整性定义(续 实体完整性定义 续)
[例1] 将Student表中的Sno属性定义为码
(1)在列级定义主码 在列级定义主码
CREATE TABLE Student (Sno CHAR(9) PRIMARY KEY, Sname CHAR(20) NOT NULL, Ssex CHAR(2) , Sage SMALLINT, Sdept CHAR(20));
An Introduction to Database System
参照完整性检查和违约处理
可能破坏参照完整性的情况及违约处理
被参照表(例如 被参照表(例如Student) ) 可能破坏参照完整性 可能破坏参照完整性 删除元组 修改主码值
参照表(例如 ) 参照表(例如SC) 插入元组 修改外码值 可能破坏参照完整性 可能破坏参照完整性
An Introduction to Database System
属性上的约束条件的定义(续 属性上的约束条件的定义 续)
3. 用CHECK短语指定列值应该满足的条件
[例7] Student表的Ssex只允许取“男”或“女”。 CREATE TABLE Student (Sno CHAR(9) PRIMARY KEY, Sname CHAR(8) NOT NULL, Ssex CHAR(2) CHECK (Ssex IN (‘男’,‘女’) ) , /*性别属性Ssex只允许取'男'或'女' */ Sage SMALLINT, Sdept CHAR(20) );
An Introduction to Database System
5.3.1 属性上的约束条件的定义
CREATE TABLE时定义
列值非空(NOT NULL) 列值唯一(UNIQUE) 检查列值是否满足一个布尔表达式(CHECK)
An Introduction to Database System
在Student表上建立了5个约束条件,包括主码约束(命名为StudentKey) 以及C1、C2、C3、C4四个列级约束。
An Introduction to Database System
完整性约束命名子句(续 完整性约束命名子句 续)
2. 修改表中的完整性约束
使用ALTER TABLE语句,修改表中的完整性 约束
数据的安全性
保护数据库防止恶意的破坏和非法的存取 防范对象:非法用户和非法操作
An Introduction to Database System
5.1.1 实体完整性定义
相关文档
最新文档