数据约束

数据约束是针对表中的列加约束。

约束分类

一、 实体完整性

实体完整性:确保每条记录的唯一性,能够被唯一区分。

主键约束(整数,字符串):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.有外键关联的两个表,删除的时候,先删除从表再删除主表

四、用户自定义完整性

        用其他特定规则实现数据约束。