-
2020-01-30 11:39:59
完整性约束:实体完整性:primary key
参照完整性:foreign key() references 表名(列名) on (增删改)(no action,cascade,set null)
用户自定义完整性:check()
完整性约束命名子句:constraint 名字 约束字句
修改完整性约束限制:alter table 表名 (drop/add) 完整性约束名更多相关内容 -
数据库完整性(实体完整性,参照完整性,用户定义完整性)
2022-04-25 21:00:21(1)提供定义完整性条件约束的机制(实体完整性,参照完整性,用户定义完整性) (2)提供完整性检查的方法(一般在 insert 、update 、delete、等语句执行后检查) (3)违约处理 完整性约束条件的分类 ①就...数据库完整性:
指数据库中数据的正确性、相容性
- 正确性:保证进入数据库的数据是符合语义约束的合法数据
- 相容性:同一个事实的两个数据应当是一致的
为了维护数据库的定义完整性:
DBMS必须具备三个功能:(完整性定义、检查控制、违约处理都是由DBMS来完成)
(1)提供定义完整性条件约束的机制(实体完整性,参照完整性,用户定义完整性)
(2)提供完整性检查的方法(一般在 insert 、update 、delete、等语句执行后检查)
(3)违约处理
完整性约束条件的分类
①就被约束的数据对象而言,完整性约束又可以分为如下表所示的四种类型约束类型 含义
类型/域约束 说明给定类型的合法取值 用户自定义的完整性
属性约束 说明属性的合法取值 用户自定义的完整性
关系约束 说明关系的合法取值 实体完整性/用户自定义的完整性
数据库约束 说明数据库的合法取值,通常涉及多个关系 实体完整性/用户自定义的完整性
②从约束的状态的角度,约束还可以分静态约束和动态约束静态约束是关于数据库正确状态的约束
动态约束是数据库从一种正确状态转移到另一种状态的转移约束实体完整性(两个关系的不变性之一):
关系模型的实体完整性在 create table 中用 primary key (主键) 定义。
单属性构成的码有两种说明方法:(1)定义列级约束条件 (2)定义表级约束条件
多属性构成的码只有一种说明方法 : 定义表级约束条件
建议都使用表级约束条件!(可使条件更加清晰)
①实体完整性定义:
每个关系应该有一个主码(可唯一标识表中的一条记录),每个元组的主码值惟一确定该元组
主码的任何属性都不能取空值
②违反实体完整性规则的操作插入(insert)新元组时可能破坏实体完整性规则(DBMS自动检查主码是否为空)
修改(updata)元组的主码时可能破坏实体完整性规则(DBMS自动检查主码是否为空)
DBMS应该自动检查是否导致违反实体完整性约束,并拒绝导致破坏实体完整性约束的任何插入或修改
SQL支持实体完整性。用户只需要在创建基本表时说明关系的主码,系统就能够自动地保证实体完整性参照完整性 ( P46 ) :实现这种引用规则(一对一,多对多),要求外码的取值只是被参照表主码的值或者取空值
关系模型的参照完整性在 create table 中用 foreign key 短语定义那些列为外码
用 references 短语指明这些外码参照哪些表的主码
foreign key (A1,...,An) references <外表名> (<外表主码>) [<参照触发动作>] --指出修改和删除违反参照完整性约束时触发的动作;缺省时,违反参照完整性的修改和删除将被拒绝 --参照触发动作可以是以下两种 on update <参照动作> [on delete <参照动作>] on delete <参照动作> [on update <参照动作>] --参照动作可以是拒绝、级联、置空值、置缺省值之一 --关系SC中(Sno,Cno)是主码。Sno,Cno分别参照Student表的主码和Course表的主码定义SC中的参照完整性 create table SC( Sno char(9) not null, Cno char(4) not null, Grade int, primary key (Sno, Cno), /*在表级定义实体完整性*/ foreign key (Sno) references Student(SNO), /*在表级定义参照完整性*/ foreign key (Cno) references Course(Cno) /*在表级定义参照完整性*/ );
①参照完整性规则:参照关系R的任何元组在其外码FKR上的值或者等于被参照关系S的某个元组在主码Ks上的值,或者为空值
②违反参照完整性的更新向参照表(外键(foreign key)在的表,如:Sno , Cno)关系R中插入元组
修改参照表关系R外码上的值
删除被参照表(在 references 后面的表,如:Student)关系S的元组
修改被参照表(在 references 后面的表,如:Course)关系S主码上的值③违约处理(违背完整性约束条件)
向参照关系R插入元组:拒绝( 默认 )
修改参照关系R外码上的值:拒绝( 默认 )
删除被参照关系S的元组:拒绝/级联( cascade )删除/置空值( set-null )/置缺省值
修改被参照关系S主码上的值:拒绝/级联删除( cascade )/置空值( set-null )/置缺省值④SQL中的参照完整性
外码可以在创建基本表时用FOREIGN KEY子句说明, 形式为:
FOREIGN KEY (A1,…, Ak) REFERENCES <外表名> (<外表主码>) [<参照触发动作>]
<参照触发动作>指:当修改和删除违反参照完整性约束时触发的动作( 缺省值,违反参照完整性的修改和删除将被拒绝 )
<参照触发动作>可以是如下两种形式之一:
ON UPDATE <参照动作> [ON DELETE <参照动作>] ON
DELETE <参照动作> [ON UPDATE <参照动作>]其中<参照动作>可以是CASCADE、SET NULL、SET DEFAULT和NO ACTION 之一,分别表示级联、置空值、置缺省值和拒绝
ON DELETE <参照动作>缺省时,违反参照完整性的删除将被拒绝
ON UPDATE<参照动作>缺省时,违反参照完整性的修改将被拒绝
eg:
如果我们希望在更新Students元组的主码时同时修改相应的SC元组的外码Sno,删除Students的元组时同时删除相应的SC元组;而更新Courses的元组时同时修改相应的SC元组的外码Cno,但不允许删除Courses的元组破坏参照完整性,则我们可以用如下语句创建基本表SC:
CREATE TABLE SC (Sno CHAR (9) not null, Cno CHAR (5) not null, Grade SMALLINT CHECK (Grade>=0 AND Grade<=100), PRIMARY KEY (Sno,Cno),/*主键*/ FOREIGN KEY(外键) (Sno) REFERENCES Students(参照学生表) (Sno) ON UPDATE CASCADE /*级联删除SC表中对应的元组*/ ON DELETE CASCADE, /*级联更新SC表中对应的元组*/ FOREIGN KEY (Cno) REFERENCES Courses (Cno) ON UPDATE CASCADE ); /*当删除course表中的元组造成了SC表不一致时拒绝删除*/
用户定义完整性:
用户定义的完整性就是针对某一具体应用的数据必须满足的语义要求。
DBMS提供了定义和检验这类完整性的机制,使用了和实体完整性、参照完整性相同的方法来处理他们,而不必由应用程序承担。
属性上的约束条件的定义
属性列:
(1)列值非空(not null)
(2)列值唯一 ( unique )
(3)检查列值是否满足一个条件表达式( check )
1、不允许取空值
在定义的列的后面 + not null
例: 在定义Stdent表时 ,Sname 、Ssex 不允许取空值
2、列值唯一
在定义的列的后面 + unique
例:建立部门表Dept ,要求部门名称 Dname 列取值唯一,部门编号Deptno列为主码(学院名不能重名)
3、用check 短语指定列值应该满足的条件
例:性别只允许 男 或 女
sage char(2)check( Ssex in ( ‘男’ ,‘ 女 ’ ) )男和女是常量表达式,需要使用单引号定界
sage smallint check (sage between 18 and 50)(年龄区间就这么写)
元组上的约束条件的定义:( 表级约束 )
在create table 时可以用 check 短语定义元组上的约束条件
元组级的限制可以设置不同属性之间的取值的相互约束条件
例:当学生的性别时男时,姓名不能以 Ms. 开头
check(Ssex = ' 女 ' or Sname not null like ' Ms. % ')逻辑或的关系
即:性别时女时,什么开头都可以,当性别是 男时第一个条件不满足,就需要看满足第二个条件,不能以Ms. 开头。
用户自定义的约束条件检查和违约处理
插入元组或修改属性的值时,rdbms检查定义的约束跳进啊是否被满足,如果不满足则操作被拒绝执行。
-
用户定义完整性约束
2020-03-31 22:40:152.用户定义完整性约束: 用户定义的完整性规则,包括非空约束、自增约束、默认值约束等、check约束以及触发器约束,本次主要学习非空约束、自增约束、默认值约束,check约束以及触发器约束在这里暂时不做介绍。 ...用户定义完整性约束:
用户定义的完整性规则,包括非空约束、自增约束、默认值约束等、check约束以及触发器约束,本次主要学习非空约束、自增约束、默认值约束,check约束以及触发器约束在这里暂时不做介绍。
非空约束(not null):
非空约束是指字段的值不能为null,null值就是没有值或值空缺,不是空串(‘ ’), 对于使用了非空约束的字段,如果用户在添加数据时没有给其指定值,数据库系统会报错。在mysql中,非空约束的定义可以使用 create table 或alter table语句,在某个列定义后面加上关键字 not null作为限定词,来约束该列的取值不能为空。
(1)创建表时,为字段添加非空约束,语法如下:
create table 表名(
字段名 数据类型 not null,
…,
字段名 数据类型
)engine=存储引擎;
例:在数据库db_school中定义班级表book1时,给字段booknum定义非空约束。
use db_school;
create table book1 (
id int(4),
booknum varchar(6) not null,
name varchar(25)
);
(2)修改表,给已经存在的字段添加非空约束,语法如下:
alter table 表名 modify 字段名 数据类型 not null;例:使用alter table...modify语句给已有字段id添加非空约束。
create table book1 (
id int(4),
booknum varchar(6),
name varchar(25)
);
alter table book1 modify id int not null;(3)修改表,添加新的字段并添加非空约束条件,语法如下:
alter table 表名 add 新字段名 新数据类型not null;
例:已有book1表,向表中新增作者字段author_name, 数据类型为char(10)、非空.
create table book1 (
id int(4),
booknum varchar(6),
name varchar(25)
);
alter table book1 add auther_name char(10) not null;(4)删除表中字段的非空约束,语法如下:
alter table 表名 modify字段名 数据类型 null;
例:已有表book1,删除字段id的非空约束。
create table book1 (
id int(4) not null,
booknum varchar(6),
name varchar(25)
);
alter table book1 modify id int(4) null;默认值(default)约束:
默认值约束用于指定一个字段的默认值。如果没有在该字段值填写数据,则该字段将自动填入这个默认值。
(1)创建表时,给字段增加默认值约束,语法如下:
create table 表名(
字段名 数据类型 default 默认值,
…,
字段名 数据类型
)engine=存储引擎;
例:在数据库db_school中定义成员表persons时,给字段city定义默认值约束。
create table persons(
id_p int ,
lastname varchar(10) ,
firstname varchar(10),
address varchar(100),
city varchar(20) default ‘shanghai’
);
以上创建的表persons中,对城市‘city’给了默认值,在插入数据的时候如果不输入其他值,给一个default,mysql会自动给默认值’shanghai’(2) 修改表,对表中已有的字段设置默认值,语法如下:
alter table 表名 alter 字段名 set default ‘默认值’;
例:使用alter table…alter语句给表persons已有字段id_p添加默认值0
create table persons(
id_p int ,
lastname varchar(10) ,
firstname varchar(10),
address varchar(100),
city varchar(20) default ‘shanghai’
);
alter table persons alter id_p set default 0;(3)修改表,在表中新增字段且为该字段设置默认值,方法如下:
alter table 表名 add 新字段名 新数据类型 default ‘默认值’;
例:给表persons增加字段sex表示性别,char(10),并且设置默认值 ‘男’;
create table persons(
id_p int ,
lastname varchar(10) ,
firstname varchar(10),
address varchar(100),
city varchar(20) default ‘shanghai’
);
alter table persons add sex char(10) default ‘男’;(4)删除表中某个字段的默认值,方法如下:
alter table表名 alter 字段名 drop default;
例:删除表persons性别字段sex的默认值
alter table persons alter sex drop default; -
关系模型中的三类完整性约束:实体完整性、参照完整性和用户定义完整性
2021-10-23 17:35:46文章目录实体完整性参照完整性用户定义完整性 实体完整性 定义:若属性A是基本关系R的主属性,则属性A不能取空值(空值就是“不知道”或“不存在”或“无意义”的值) 例: 选修(学号,课程号,成绩) “学号...实体完整性
定义:若属性A是基本关系R的
主属性
,则属性A不能取空值(空值就是“不知道”或“不存在”或“无意义”的值)例: 选修(学号,课程号,成绩) “学号、课程号”为主码 “学号”和“课程号”两个属性都不能取空值
实体完整性规则的说明:
- 实体完整性规则是针对基本关系而言的。 一个基本表通常对应现实世界的一个实体集。
- 现实世界中的实体是可区分的,即它们具有某种唯一性标识。
- 关系模型中以主码作为唯一性标识。
主码中的属性即主属性不能取空值
。
主属性取空值,就说明存在某个不可标识的实体,即存在不可区分的实体,这与第(2)点相矛盾,因此这个规则称为实体完整性
参照完整性
定义:指如果属性(或属性组)F是关系R的外码,且对应了关系S的主码K(R和S可以是同一个关系),那么对于R中的每个元组中的F上的值,必须满足:
(1) 要么F取空值
(2) 要么等于S中某个元组的主码的值例: 学生(学号,姓名) 课程(课程号,课程名) 选修(学号,课程号,成绩)
选修表中的学号就称为选修表的一个外码,它对应的是学生表中的学号。并且称选修关系为
参照关系
,而学生关系为被参照关系
。显然,在选修关系中的学号,必须是学生表里真正存在的学号,且选修表里的课程号,也必须是课程表里真正存在的课程号。这就是参照完整性的一个典型表现了。参照完整性规则的说明:
- 关系R和S不一定是不同的关系
- 目标关系S的主码Ks 和参照关系的外码F必须定义在同一个(或一组)域上
- 外码并不一定要与相应的主码同名
用户定义完整性
任何关系型数据库,都一定要支持实体完整性和参照完整性。
但同时往往在不同的情况下,我们还需要一些特殊的约束条件,比如性别只能是男或女,年龄不能超过150岁等等。
这种针对某一具体关系数据库的约束条件称为用户定义的完整性,它反映某一具体应用所涉及的数据必须满足的语意要求。Reference:
关系的三类完整性约束
数据库关系模型的三类完整性约束 -
5.3 用户定义的完整性
2022-01-24 22:33:235.3 用户定义的完整性 -
用户定义的完整性
2020-04-28 10:38:571.概述:用户可以自定义完整性机制,由数据库管理系统检查,并给出检查结果。 2.约束条件的种类: 2.1属性上的约束条件: 2.1.1列值非空(NOT NULL) 2.1.2 列值唯一 (UNIQUE) 2.1.3 l列值是否满足一个表达式... -
【数据库系统设计】数据库完整性(实体完整性、参照完整性、用户定义的完整性、CHECK语句)
2020-03-30 00:44:28数据库完整性5.1 实体完整性5.1.1 实体完整性定义5.1.2 实体完整性检查和违约处理5.2 参照完整性5.2.1 参照完整性定义5.2.2 参照完整性检查和违约处理小结5.3 用户定义的完整性5.3.1 属性上的约束条件不允许取空值列... -
定义完整性约束
2021-04-12 18:15:17在关系模型中,提供了实体完整性、参照完整性和用户定义的完整性等三项规则。下面将分别介绍MySQL中对数据库完整性三项规则的设置和实现方式。 主要内容: 1)实体完整性 2)用户自定义的完整性 3)参照完整性 实体... -
数据库完整性(实体完整性、参照完整性、用户定义的完整性、完整性约束命名字句、断言、触发器)
2020-05-18 19:51:48数据库完整性:数据的正确性(是指数据是符合现实世界语义,反映了当前实际状况的)、数据的相容性(是指数据库同一对象在不同关系表中的数据是符合逻辑的) 数据的完整性 : 防止数据库中存在不符合语义的数据,... -
数据库约束——用户定义完整性(User-defined Integrity)
2012-10-29 16:06:48用户自定义完整性是针对某一具体关系数据库的约束条件,它反映某一具体应用所涉及的数据必须满足的语义要求。主要包括非空约束、唯一约束、检查约束、主键约束、外键约束 1、非空约束(Not Null Constraint) ... -
Mysql(数据库完整性)
2021-01-19 08:37:16关系模型有三种完整性约束:实体完整性,参照完整性和用户定义的完整性。1、实体完整性实体完整性是指,如果一个表的属性被确定为主属性,那么这个属性就不能取空值。实体完整性用于区分不同的实体,如果取空值就... -
数据库原理 数据库完整性-用户自定义完整性
2020-02-29 20:16:44属性上的约束条件 元组上的约束条件 小结 -
数据库--完整性(实体完整性、参照完整性、用户自定义完整性)
2020-04-27 13:27:13 -
实体完整性参照完整性和用户自定义的完整性分别是怎样体现的
2018-08-13 16:34:41关系的完整性是关系型数据模型结构中的另一组成部分,它分为实体完整性、参照完整性和用户定义完整性三类。在关系数据库中一个关系对应现实世界的一个实体集,关系中的每一个元组对应一个实体。在关系中用主关键字来... -
SQL语句(九)用户自定义完整性
2018-07-20 13:11:421.用户自定义完整性 SQL Server支持的用户自定义完整性主要有NOT NULL(不为空)、UNIQUE(唯一)、NULL(空)、CHECK(检查是否在某一范围之内)。 2.实例 1.定义NULL/NOT NULL约束 CREATE TABLE nation2(/*... -
数据库实验:用户自定义的完整性
2020-06-21 15:49:00掌握用户自定义完整性的定义和维护方法。 2. 实验内容 针对具体应用语义,选择NULL/NOT NULL、DEFAULT、UNIQUE、CHECK等,定义属性上的约束条件。 3. 实验重点和难点 实验重点:NULL/NOT NULL,DEFAULT。 实验... -
彻底聊聊关系数据库中的完整性约束:实体完整性、参照完整性和用户定义的完整性
2021-12-28 11:01:31先用最简单的话总结一下,实体、参照和用户定义的完整性,避免理论性的论述性的内容过长过繁。 实体完整性:是用来唯一标识实体的要求(即现实世界中唯一存在的一个事物、人或个体)。不能为空,需要唯一确认,... -
数据库:DDL,DML,DCL,实体完整性,参照完整性,用户自定义完整性
2018-09-24 18:26:461.DDL,DML,DCL DDL:数据库定义语言。用来定义表或者改变表的结构,数据类型,表之间的连接,约束等初始化工作上。包括:CREATE DROP ALTER等 ...用来设置或者更改数据库用户或者角色权限的语言,包括:GRAN... -
SQL完整性约束
2019-06-04 16:24:581.数据定义语句: DDL:create、alter、drop、truncate(表结构) 2.数据操纵语句: DML:insert、delete、update、select 3.数据控制语句: DCL: 授权:grant、收回权限:revoke 4.失误控制语句: TCL:开启事务... -
关系数据库的三个完整性约束是什么?各是什么含义
2021-01-28 00:32:59展开全部可分为三种类型:与表有关的约束e68a84e8a2ad...可在列定义时定义该约束,此时称为列约束,也可以在表定义时定义约束,此时称为表约束。包括列约束(表约束+NOTNULL)和表约束(PRIMARYKEY、... -
数据库中的完整性约束及实例
2015-02-09 15:36:411 定义 数据完整性用于保证数据库中数据的正确性、一致性和可靠性。 2 类型 • 实体完整性(Entity Integrity) ...• 用户定义完整性(User-defined Integrity) 图示 实体完整性(Entity In -
数据库完整性实验报告
2019-12-03 13:43:39实验六 数据库完整性 一、实验学时 2学时 二、实验目的 (1)实现数据完整性的概念及实施数据完整性的重要性。 (2)掌握数据完整性的分类。 (3)掌握完整性约束的添加、删除方法。 (4)掌握通用默认值的... -
SQL语言基础:SQL中的数据完整性约束用法
2020-11-22 07:40:30前言数据库的完整性是指数据库正确性和相容性,是防止合法用户使用数据库时向数据库加入不符合语义的数据,从而保证了数据库中的数据是正确的,避免非法的更新操作。1、主键... -
对用户定义的完整性的认识
2015-11-30 22:15:22静态约束在表约束定义中定义,动态约束在触发器中定义。 三:断言与数据库约束 创建断言的语句格式: create assertion 断言名 check(条件) 约束性质 其中约束性质是deferrable或者not deferrable。 删除... -
SQL server给完整性约束命名及删除完整性约束
2020-04-24 11:46:20本文对三种完整性约束,在创建表时以及创建表后如何给约束命名(列级、表级)做了介绍。 最后介绍了在约束命名的条件下,如何删除约束。 1.为约束起命名时,用到的关键字CONSTRAINT。 2.需要注意的是,在同一数据库... -
T-SQL 学习之路之数据库完整性之域完整性
2015-10-22 19:46:16数据库完整性是指对数据库的一致性和准确性强制数据完整性可靠性保证 -
SQL server完整性约束的操作
2020-04-23 18:05:36【注】:完整性约束条件涉及到该表的多个属性列时,则必须定义在表级上,否则既可以定义在列级也可以定义在表级。 实体完整性的操作 一、创建表时,可以规定实体完整性 在CREATE TABLE语句中使用PRIMARY KEY... -
【数据库系统概论(基础篇)】 第五章 数据库完整性
2019-07-16 15:38:40【浅析用户定义的完整性的违约处理方式】说明用户定义完整性的方法,检查时机以及各类违约处理方式。 【如何定义断言】 断言的用途是什么?在学生-课程-选课数据库中,如何定义断言“每学期每个学生最多可以... -
数据库实验三——完整性定义与检查
2021-04-29 22:56:38数据库实验三——完整性定义与检查一、 实验题目二、 实验内容和要求三、 实验步骤(一) 实体完整性实验1. 创建表时定义实体完整性2. 创建...用户自定义完整性实验1. 定义NULL/NOT NULL约束、DEFAULT约束、UNIQUE约束...