数据库完整性约束

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

一、完整性约束定义

完整性约束关键字含义
NOT NULL约束字段的值不能为空
DEFAULT设置字段的默认值
UNIQUE约束字段的值唯一
PRIMARY KEY约束字段为表的主键,可以作为该表记录的唯一标识
AUTO_INCREMENT约束字段的值为自动增加
FOREIGN KEY约束字段为表的外键
CHECK ( )检查列值是否满足一个条件表达式
  • check条件约束在mysql中不可用,可用EUNM枚举类型或者触发器代替
单字段主键

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

列级约束条件

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

mysql使用ENUM 枚举类型完成check约束

CREATE TABLE student(
	Sno varchar(10) NOT NULL,
    Sname varchar(16) NOT NULL,
    Ssex enum('男','女') NOT NULL
	PRIMARY KEY (Sno)
) 

更新Ssex字段的值为‘男’:
在这里插入图片描述
更新Ssex字段的值为‘不男不女’,失败。
在这里插入图片描述
mysql使用触发器完成check约束

先给student表加上Sage字段,值为int类型

alter table student add Sage int(10);

二、完整性约束检查

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

级联操作

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

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

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值