精华内容
下载资源
问答
  • 关系模型分三类约束:实体完整性约束、参照完整性约束和用户自定义完整性约束。 前两者是必须满足的条件,称作关系的两个不变性。由DBMS自动支持 实体完整性约束(Entity Integrity Constraint) 此约束指关系的主...

    概述

    数据完整性指数据库中数据的正确性、相容性和一致性。包括现实世界中的应用需求的完整性。数据的完整性由完整性规则来定义。

    关系模型的完整性规则是对关系的某种约束,提供一种手段来保证用户对数据库的修改时不会破坏数据库中数据的完整性。保证数据是有意义的。

    关系模型分三类约束:实体完整性约束、参照完整性约束和用户自定义完整性约束。 前两者是必须满足的条件,称作关系的两个不变性。由DBMS自动支持

    实体完整性约束(Entity Integrity Constraint)

    此约束指关系的主属性,主码不能为空,在关系数据库系统中,一个关系对应一张表,实体完整性指在数据存储数据的表中,主键/码不能取控值 NULL

    参照完整性约束 (Referential Integrity Constraint)

    现实世界中实体之间往往存在某种联系,在关系模型中这种联系通过关系来描述

    参照完整性约束就说定义外码和主码之间的引用规则,是对关系间引用数据的一种限制。若属性(属性组)X 是基本关系 R 的外码,它与基本关系 S 的主码 Y 对应,那么 R 中每个元组在 F 上的值要么取 NULL,要么等于 S中对应元组的主码值。 R 和 S 可以是不同的关系,也可以是同一关系。

    如:

    教师(职工号,姓名,性别,系编号)
    系(系编号,系名,办公地点)
    

    上述两个关系之间存在属性的引用,系编码既是 关系的主码又是教师关系的外部码。那么教师 关系中系编码属性的取值需要参照 关系中系编码的值或为 NULL。

    用户定义完整性约束 (User-defined Integrity constraint)

    此约束针对某一应用环境的完整性约束条件,反映了某一具体应用所涉及的数据应满足的要求。关系模型提供定义和检验的机制,此类规则一般在建立数据库表的同时进行定义,如果某些条件未建立在库表一级,则应在各个模块的具体编程中通过程序进行检查和控制。

    关系模型完整性约束检验 重点

    在对数据库进行修改时须检验是否满足对上述三类完整性约束

    插入操作

    首先检查实体完整性约束,检查插入行在主码属性上的值是否已存在,不存在,可以执行插入,否则不可插入。再检查参照完整性约束,如果是向被参照关系插入,则不需要考虑此约束;如果向参照关系插入,则检查插入行在外码属性上的值是否已在相应被参照关系的主码属性中存在,存在,可插入,否则不可插入,或者将插入行的外码属性的值改为NULL,再插入,最后检查自定义完整性约束,包括数据的类性、精度、取值范围、是否允许空值、是否有默认值等,满足即可执行插入操作,否则给出错误信息。

    删除操作

    一般只需对被参照关系检查参照完整性约束。如果主键被引用则不可删,或将参照关系中对应行的外码属性改为为NULL,再删除

    更新操作

    结合删除 和 插入操作,先删除再插入。

    展开全文
  • 数据完整性约束

    2019-05-20 10:15:51
    数据完整性约束 知道什么是数据完整性 知道如何使用约束 数据完整性 存储在数据库中的所有数据值均正确的状态。 如果数据库中存储有不正确的数据值,则该数据库称为已丧失数据完整性。 数据完整性包括: 域完整性 ...

    数据完整性约束

    知道什么是数据完整性
    知道如何使用约束

    1. 数据完整性
      存储在数据库中的所有数据值均正确的状态。

    如果数据库中存储有不正确的数据值,则该数据库称为已丧失数据完整性。

    数据完整性包括:

    域完整性
    实体完整性
    参考完整性
    数据库通过约束来保证数据完整性。

    它通过对表的行或列的数据做出限制,来确保表的数据的准确性,完整性、唯一性,可靠性、联动性。

    1. 数据常见问题
      数据冗余

    失去数据完整性

    数据缺少唯一标识

    失去实体完整性

    失去域完整性

    失去引用完整性

    1. 数据库常用约束
      主键约束 作用:让数据具有唯一标识 语法:primary key

    create table tpk(id int primary key , name char(10));

    字段被设置了主键约束,同时也具有了唯一性约束和非空约束。 在字段中插入重复数据时,或不给数据时会报错。

    自动增长 作用:让数字值自动累加 语法:auto_increment 自动增长设置在数值型字段上,需要配合主键约束一起使用。 如果字段没有设置主键约束,是不允许设置自动增长的。

    create table tai(id int auto_increment primary key,name varchar(10));

    唯一性约束 作用:保证数据的准确性,不会出现重复数据 语法:unique

    create table tuni(id int unique,name char(10));

    一个表中可以给多个字段设置唯一性,如果有需要的话。

    非空约束 作用:不允许字段为空,添加数据时必须给值 语法:not null

    create table tnn(id int,name char(10) not null);

    默认约束 作用:在添加数据时,如果没有给定有默认约束字段的数据,该字段使用默认值填充 语法:default

    create table tdt(id int,name char(10) default ‘NoName’);

    外键约束 作用:让两表之间产生联动关系 语法:foreign key(字段名) references 表名(字段名)

    – 表1
    create table fClass(id int primary key,name char(10));
    – 表2
    create table fStudent(id int primary key auto_increment, name char(10), cid int, foreign key(cid) references fClass(id));

    设置外键约束字段所关联的字段,必须是主键约束字段。

    想要删除有设置外键的表,必须先删除外键所关联的表。

    drop table fStudent;
    drop table fClass;

    展开全文
  • 数据库中的数据完整性约束

    万次阅读 多人点赞 2018-06-14 18:43:33
    这篇文章讲的是数据库中的数据完整性约束,如有错误或不当之处,还望各位大神批评指正。 什么是数据完整性约束? 数据完整性:存储在数据库中的所有数据值均正确的状态。它是应防止数据库中存在不符合语义规定的...

    这篇文章讲的是数据库中的数据完整性约束,如有错误或不当之处,还望各位大神批评指正。

    什么是数据完整性约束?

    数据完整性:存储在数据库中的所有数据值均正确的状态。它是应防止数据库中存在不符合语义规定的数据和防止因错误信息的输入输出造成无效操作或错误信息而提出的。

    数据完整性分为四类:
    1. 实体完整性(实体完整性是对关系中的记录唯一性,也就是主键的约束。准确地说,实体完整性是指关系中的主属性值不能为Null且不能有相同值。定义表中的所有行能唯一的标识,一般用主键,唯一索引 unique关键字,及identity属性比如说我们的身份证号码,可以唯一标识一个人.。)
    2. 域完整性(域完整性是对数据表中字段属性的约束,通常指数据的有效性,它包括字段的值域、字段的类型及字段的有效规则等约束,它是由确定关系结构时所定义的字段的属性决定的。限制数据类型,缺省值,规则,约束,是否可以为空,域完整性可以确保不会输入无效的值.。)
    3. 参照完整性(参照完整性是对关系数据库中建立关联关系的数据表间数据参照引用的约束,也就是对外键的约束。准确地说,参照完整性是指关系中的外键必须是另一个关系的主键有效值,或者是NULL。参考完整性维护表间数据的有效性,完整性,通常通过建立外部键联系另一表的主键实现,还可以用触发器来维护参考完整性)
    4. 用户定义的完整性。

    约束是表级的强制规定,有以下五中:not null,unique,primary key,foreign key,check 。

    创建约束

    非空约束(not null)

    not null为列级约束,只能作用在列上
    - 新建表std1,字段:id(非空),name(非空),score(可为空)

    create table std1 (
         id number(6) constraint std1_id_nn not null ,
         name varchar(200) not null,
         score number(10,2)
    )

    这事如果在操作时定义为非空的字段为空,则会报错:
    这里写图片描述

    唯一约束(unique)

    • 新建表std2,字段:id(唯一),name(非空),score(可为空)
    create table std2 (
         id number(6) constraint std2_id_uk unique ,
         name varchar(200) constraint std2_name_nn not null,
         score number(10,2) ,
         email varchar(20) ,
    --表级约束
         constraint std2_email_uk unique(email)
    )

    这时,若有唯一约束的字段出现了重复值,则会报错:
    这里写图片描述

    注:unique允许多个空值

    主键约束(primary key)

    • 新建表std3,字段:id(主键),name(非空),score(可为空)
    create table std3 (
         id number(6) constraint std3_id_pk primary key ,
         name varchar(200) constraint std3_name_nn not null,
         score number(10,2) ,
         email varchar(20) ,
    --表级约束
         constraint std3_email_uk unique(email)
    )
    
    --或者
    
    create table std3 (
         id number(6) ,
         name varchar(200) constraint std3_name_nn not null,
         score number(10,2) ,
         email varchar(20) ,
    --表级约束
         constraint std3_email_uk unique(email) ,
         constraint std3_id_pk primary key(id)
    )

    此时若往主键字段插入空值则:
    这里写图片描述
    若主键重复则:
    这里写图片描述

    注:一个表只能有一个主键,主键非空且唯一

    外键约束(foreign key)

    • 新建表std4,字段:id(主键),name(非空),score(可为空),friend_id(外键关联std3.id)
    create table std4 (
         id number(6) ,
         name varchar(200) constraint std4_name_nn not null,
         score number(10,2) ,
         email varchar(20) ,
         friend_id number(6) ,
    --表级约束
         constraint std4_email_uk unique(email) ,
         constraint std4_id_pk primary key(id) ,
         constraint std4_friend_id_fk foreign key(friend_id) references std3(id)
    )

    此时,若std4表中插入std3中不存在的id,则报错:
    这里写图片描述

    检查约束(check)

    • 新建表std7,字段:id(主键),name(非空),score(值范围为0-100)
    create table std7 (
         id number(6) ,
         name varchar(200) constraint std7_name_nn not null,
         score number(10,2) ,
         email varchar(20) ,
    --表级约束
         constraint std7_email_uk unique(email) ,
         constraint std7_id_pk primary key(id) ,
         constraint std7_score_ck check (score >= 0 and score <= 100)
    )

    此时如果添加数据不在check所约束的范围内则:
    这里写图片描述

    添加删除约束

    可以往已知表中添加新的约束,使用ALTER TABLE - ADD(MODIFY)语句可以添加约束,

    not null约束为列级约束必须使用modify

    • 往表std1的score字段加入非空约束
    alter table std1
    modify(score number(10,2) not null)
    • 删除表std1中id非空的约束
    alter table std1
    drop constraint std1_id_nn ;
    • 给表std1的score加入检查约束,要求范围为1-100
    alter table std1
    add(constraint std1_score_ck check(score>=0 and score<=100)) ;

    有效化无效化约束

    可以将已有表中的约束有效化或无效化(disabled)。

    • 将表std1中score字段的检查约束std1_score_ck 无效化
    alter table std1
    disable constraint std1_score_ck ;

    此时检查约束将不再有效,可以添加不在check范围的数据。

    • 将表std1中score字段的检查约束std1_score_ck 有效化
    alter table std1
    enable constraint std1_score_ck ;

    此时约束重新生效。

    级联删除与级联制空祥例

    1. 级联删除(ON DELETE CASCADE):当父表中的列被删除时,字表中相对应的列也被删除。
    2. 级联制空(ON DELETE SET NULL):当父表中的列被删除时,字表中相对应的列被制空。

    表结构及初始数据

    std3表结构:

    create table std3 (
         id number(6) ,
         name varchar(200) constraint std3_name_nn not null,
         score number(10,2) ,
         email varchar(20) ,
    --表级约束
         constraint std3_email_uk unique(email) ,
         constraint std3_id_pk primary key(id)
    )

    std3中数据如下:
    这里写图片描述

    std5表结构(外键级联删除):

    create table std5 (
         id number(6) ,
         name varchar(200) constraint std4_name_nn not null,
         score number(10,2) ,
         email varchar(20) ,
         friend_id number(6) ,
    --表级约束
         constraint std5_email_uk unique(email) ,
         constraint std5_id_pk primary key(id) ,
         constraint std5_friend_id_fk foreign key(friend_id) references std3(id) on delete cascade
    )

    std5中数据如下:
    这里写图片描述

    std6表结构(外键级联删除制空):

    create table std6 (
         id number(6) ,
         name varchar(200) constraint std6_name_nn not null,
         score number(10,2) ,
         email varchar(20) ,
         friend_id number(6) ,
    --表级约束
         constraint std6_email_uk unique(email) ,
         constraint std6_id_pk primary key(id) ,
         constraint std6_friend_id_fk foreign key(friend_id) references std3(id) on delete set null
         )

    std6中数据如下:
    这里写图片描述

    级联操作

    • 此时删除std3中‘300001’号数据以后:

    std5表:
    这里写图片描述

    std6表:
    这里写图片描述

    注:级联删除会删除相关联子表中的数据,而级联制空会将子表中相关联的数据制空而不会删除

    展开全文
  • 一、实体完整性(要求有唯一健) ...二、参照完整性(外键的参照)(引用完整性约束) 参照完整性要求关系中不允许引用不存在的实体。设定相应的更新删除插入规则来更新参考表。 例如表sutdent(有i...

    参考:https://blog.csdn.net/zwc2xm/article/details/72864589

    一、实体完整性(要求有唯一健)

    实体完整性要求每个表都有唯一标识符,每一个表中的主键字段不能为空或者重复的值

     

    二、参照完整性(外键的参照)(引用完整性约束)

    参照完整性要求关系中不允许引用不存在的实体。设定相应的更新删除插入规则来更新参考表。

    例如表sutdent(有id,username,password),表sutdent_info(有id,name,age,sex)。其中表sutdent_info参照了表student。id作为外键。那么当student表删除一行时,表student_info对应的id那一列将被删除或者置空(根据设定的规则而定)。同样,表student_info增加一行,其中的id必须等于student表中的id。
     

    三、用户自定义完整性

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

    也就是说:某个表你设置这一列为null,not null,default,check等。包括:非空约束、唯一约束、检查约束、主键约束 、外键约束

     

     

    展开全文
  • 数据完整性约束包括域完整性、实体完整性、参照完整性和用户定义完整性。 域完整性包括了数据类型、输入格式、数据可能的取值范围。数据类型就是规定输入的数据是字符、整数、实数等等。输入格式规定数据以怎样...
  • 关系模型的完整性约束

    千次阅读 2018-07-29 00:11:11
    关系完整性约束分为三类: 实体完整性:关系必须有主键,且不能为空; 参照完整性:维护实体之间的引用关系,外键可以为空,或者其值为参照关系对应的主键值; 用户定义的完整性:由应用环境决定,针对具体关系...
  • Java 数据完整性约束

    千次阅读 2012-06-06 19:01:39
    数据完整性约束 主键约束 主键就是表中的一列或多个列的一组,其值能唯一地标志表中的每一行。通过定义PRIMARY KEY约束来创建主键,而且PRIMARY KEY约束中的列不能取空值。由于PRIMARY KEY约束能确保数据的唯一,...
  • 关系完整性约束

    千次阅读 2019-06-15 14:25:21
    除此之外,一个属性能否为NULL,这是由语义决定的,也是域完整性约束的主要内容。 包括检查(CHECK)、默认值(DEFAULT)、不为空(NOT NULL)、外键(FOREIGN KEY)等约束。 实体完整性(Entity integr...
  • DBMS 数据完整性约束

    2005-03-18 20:11:00
    标准的数据完整性约束是DBS已经实现的内部规则,包括域完整性、实体完整性和引用完整性。 域完整性(Field Integrity)保证一个数据库不包含无意义的或不合理的值,即保证表的某一列的任何值是该列域(即合法的...
  • 数据库中的数据必须是正确的、一致的、完整的和可靠的,为了防止数据库中存在不符合语义规定的数据和防止因输入错误数据造成的无效操作,有必要实施数据完整性约束关系数据库,关系模型中三类完整性约束: 1 ...
  • 三种关系完整性约束

    千次阅读 2020-10-05 21:50:54
    关系模型组成:关系数据库,关系操作集合,关系完整性约束关系的三类完整性约束: (1)实体完整性(必须) 若属性A是基本关系R的主属性,则A不能取空值。 检查和违约处理: 1)检查主码值是否唯一,如果不唯一则...
  • MySQL学习之(八)数据完整性约束

    千次阅读 2018-10-31 16:54:31
    4、参照完整性约束 ①参照完整性约束说明 5、CHECK约束 6、删除完整性约束   主键就是表中的一列或多个列的一组,其值能唯一地标志表中的每一行。通过定义PRIMARY KEY约束来创建主键,而且PRIMARY KEY约束中的...
  • 完整性约束

    2016-04-17 11:21:26
    完整性通常包括域完整性,实体完整性、参照完整性和用户定义完整性,其中域完整性,实体完整性和参照完整性,是关系模型必须满足的完整性约束条件。域完整性约束域完整性是保证数据库字段取值的合理性。 属性值应是...
  • 数据库关系模型的三类完整性约束

    千次阅读 2019-02-25 10:12:10
    关系模型中有三类完整性约束,分别是:实体完整性,参照完整性,用户定义完整性 实体完整性 定义:实体完整性是用于保证关系数据库中每个元组都是可区分的,唯一的。 它的意思就是说数据表中每一行都应该有办法...
  • 关系模型的数据结构非常简单,只包含单一的数据结构---关系 关系有3种类型:基本关系(通常又称基本表...前面说了,关系完整性包括3个方面:实体完整性、参照完整性和用户定义完整性(前2个是任何关系数据库系...
  • 文章目录目录实体完整性(主键约束)用户定义完整性(非空约束、唯一约束、检查约束和默认值)参照完整性(外键约束)关联关系一对一、一对多关联多对多关联 实体完整性(主键约束) 每个关系(表)至少存在一个主键...
  • 关系数据模型的三大完整性约束

    千次阅读 2021-07-09 12:53:11
    要想了解这三类完整性约束,先要了解什么是数据完整性。         数据库中的数据是从外界输入的,而数据的输入由于种种原因,会发生输入无效或错误信息。保证输入的数据...
  • Oracle常用数据类型和完整性约束

    千次阅读 2013-08-28 10:11:00
    常用数据类型和完整性约束 (1)基本数据类型 字符型 Char 定长 最大2000个字符 示例:char(10)‘数据库’前6个字符存放‘数据库’,后面以4个空格填充补全。 Varchar2() 变长 最大4000个字符 Char查询的速度快...
  • 数据结构(表结构)+关系操作(八个操作)+完整性约束(三个完整性) 实体完整性 在关系表中,所有元组主码的值都不能为空。 参照完整性 在关系模型中,采用给关系定义外键的形式进行关系间属性的引用,从而实现...
  • 数据完整性(Data Integrity)是指数据的精确(Accuracy)和可靠性(Reliability)。 分为以下四类: 1、实体完整性:规定表的每一行在表中是惟一的实体。 2、域完整性:是指表中的列必须满足某种特定的数据类型约束,其中...
  • 关系模型=关系数据结构+关系操作集合+关系完整性约束 关系数据结构:关系、关系模式、关系数据库 关系 关系也是一个二维表,表的每行对应一个元组,表的每列对应一个域,每一列称为一个属性,不同的属性要给予...
  • 前言数据库的完整性是指数据库正确性和相容性,是防止合法用户使用数据库时向数据库加入不符合语义的数据,从而保证了数据库中的数据是正确的,避免非法的更新操作。1、主键...
  • mysql 完整性约束

    2016-01-09 11:26:30
    前言:数据完整性约束是一组完整性规则的集合。它定义了数据模型必须遵守的语义约束,也规定了根据数据模型所构建的数据库中数据内部及其数据相互间联系所必须满足的语义约束,约束是添加到列上的,用来约束列。  ...
  • 关系的三类完整性约束

    万次阅读 2017-08-23 21:07:06
    关系的三类完整性约束 实体完整性 若属性(指一个或一组属性)A是基本关系R的主属性,则A不能取空值。 参照完整性 若属性(或属性组)F是基本关系R的外码,它与基本关系S的主码K相对应(或者说F引用了...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 97,378
精华内容 38,951
关键字:

关系数据完整性约束包括