数据约束
数据约束是针对表中的列加约束。
约束分类
一、 实体完整性
实体完整性:确保每条记录的唯一性,能够被唯一区分。
主键约束(整数,字符串):primary key
特点:
1. 主键列的数据不能重复
2.主键列的数据不能为空
3.主键列可以是整数也可以是字符串
4. 主键列可以由一列构成,也可以由多列构成(联合主键)。一个表中只能有一个主键
#主键约束
create table student
(
studentId int primary key,
name varchar(20),
sex char(1),
age int
)
#联合主键
create table exam
(
studentId int,
courseId int ,
score int ,
primary key (studentId,courseId) #联合主键,学号和课程编号联合起来是唯一的
)
自增约束(整型):auto_increment
特征:
自增约束只能加到整数类型的列上,一个表只能有一个列加自增约束
该列的值会有系统自动生成,数据也是唯一的,一般和主键约束一起使用
特点:
1.针对自增约束的列系统自动生成唯一编号
2.自增约束必须在主键约束的基础上使用,主键列必须是整数类型
3.自增约束不一定保证连续性
4.自增约束会在前一条记录的基础上增1,默认从1开始
#自增约束
create table student
(
studentId int primary key auto_increment,
name varchar(20),
sex char(1),
age int
)
唯一(索引)约束:unique
特征:
1.唯一约束的列数据必须唯一
2.列值允许空(可以有多个空值)
#唯一约束
create table student
(
studentId int primary key auto_increment,
name varchar(10),
sex char(1),
phone varchar(11) unique #唯一约束
)
二、域完整性
域完整性:针对数据的取值做约束。
非空约束:not null
特征: 加了该约束的列,不能为空,该列必须有值
默认值约束:default
特征: 加了默认值约束的列,如果没有提供值时,自动用默认值替代。如果提供了值则用提供值的填充。
#默认值约束
create table student
(
studentId int primary key auto_increment,
name varchar(20) not null,
sex char(1) not NULL,
phone varchar(11) not null unique,
address varchar(20) default '郑州' #默认值
)
外键约束:foreign key
特征::存在于多表之间,如果一个表中某列的数据依赖于另外一个表的数据,此时要对这个列加外键约束。该列的值不能随便写。
#外键约束
create table student
(
studentId int primary key auto_increment,
name varchar(20),
sex char(1),
birthday date,
bjId int , #对班级编号加外键约束
foreign key (bjId) # 定义当前表中哪个列作为外键
references classInfo(classId) #关联另外一个表的那个列
)
check约束:mysql没有,ms SQLserver有 限定值的范围(性别:男,女)
注意:不写外键规则,但存在外键约束,这种称为逻辑外键。定义外键规则,称为物理外键。
三、引用完整性
引用完整性:多表之间有数据的依赖关系,要确保依赖关系的正确性
外键约束:foreign key 特征:存在于多表之间,如果一个表中某列的数据依赖于另外一个表的数据,此时要对这个列加外键约束。该列的值不能随便写。
注意:
1.有外键关联的两个表,从表插入的外键列的数据必须在主表中存在
2.主表中的数据被关联的情况下,不能删除
3.主表中的数据被关联的情况下,不能修改
4.有外键关联的两个表,删除的时候,先删除从表再删除主表
四、用户自定义完整性
用其他特定规则实现数据约束。