数据库完整性约束

▼魔方 西西 提交于 2020-02-04 08:30:18

完整性是指数据的准确性和一致性
针对表中的数据做一些完整性检查操作,通过表的约束完成
通常在建表的时候作为元组的属性加入。

一、完整性约束定义

完整性约束关键字 含义
NOT NULL 约束字段的值不能为空
DEFAULT 设置字段的默认值
UNIQUE 约束字段的值唯一
PRIMARY KEY 约束字段为表的主键,可以作为该表记录的唯一标识
AUTO_INCREMENT 约束字段的值为自动增加
FOREIGN KEY 约束字段为表的外键
CHECK ( ) 检查列值是否满足一个条件表达式

单字段主键

对单属性构成的码有两种说明方法,一种是定义为列级约束条件,另一种是定义为表级约束条件。

列级约束条件

create table student(
	sno char(9) primary key,
	sname char(20) not null,
	sex char(2)
	);

表级约束条件

create table student(
	sno char(9),
	sname char(20) not null,
	sex char(2),
	primary key (sno)
	);

多字段主键

对多属性构成的码只能用表级约束条件
将sno和sname两个属性(列)定义为码

create table student(
	sno char(9) not null,
	sname char(20) not null,
	sex char(2),
	primary key (sno,sname)
	);

外键

外键保证两个多个表之间的参照完整性,主要目的是控制存储在外键表中的数据。

设置外键约束的两个表之间会具有父子关系,子表中的为外键

创建SC表,其中(sno,cno)是主码。sno、cno分别参照关联student表的主码和course表的主码。

create table SC(
	sno char(9) not null,
	sname char(20) not null,
	cno char(9),
	primary key (sno,cno),
	foreign key (sno) references student(sno),
	foreign key (cno) references course(cno)
	);

check约束

CHECK 约束用于限制列中的值的范围。
如果对单个列定义 CHECK 约束,那么该列只允许特定的值。
如果对一个表定义 CHECK 约束,那么此约束会在特定的列中对值进行限制。

创建表时使用check约束

CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Sex char(2) check (FirstName in ('男','女')),
CHECK (Id_P>0)
)

表已存在的情况下创建check约束

ALTER TABLE Persons
ADD CHECK (Id_P>0)

删除check约束

ALTER TABLE Persons
DROP CONSTRAINT chk_Person

二、完整性约束检查

在这里插入图片描述
发生完整性不一致时,系统会有以下策略:
1、拒绝执行
2、级联操作(cascade)
3、设置为空值

级联操作

决定了从表的外码更新了之后,主表的主码做出什么操作

ON DELETE CASCADE 级联删除
ON UPDATE CASCADE 级联更新
ON UPDATE NO ACTION 无操作

同步删除
同步更新
不对主表进行操作

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!