MySQL表的约束
前言
1.空属性
2.默认值
3.列描述
4.0填充
5.主键
复合主键 :
6.自增长
7.唯一键
8.外键
前言
我们在生活中,每个人都有一个或多个独一无二的属性,但是当我们在MySQL中进行数据插入时,我们可能错误的将这些独特的属性重复插入而全然不知,诸如此类或者其他特殊情况。为了避免这种情况发生。MySQL在设计时添加了对表中列属性约束的选项。本文就来介绍一下MySQL中一些常见的约束。
1.空属性
案例:
创建一个班级表,包含班级名或班级所在的教室。
- 如果班级名为空,那么就不知道某个人对应的是哪个班级的。
- 如果班级所在教室为空,那么就不知道某个人所在的教室是哪个。
所以,以上两种属性均为必要属性,都不能为空(not null),这个时候就需要在建立表的时候添加非空约束。
create table [表名]([列名] [列类型] not null,... );

2.默认值
当一某个属性在某个数据集中出现占大多数的时候,我们可以为该对象的属性设置一个默认值(deafault),这样做之后,我们只对有变化的值进行显示插入即可。
create table [表明]([列名] [列类型] defaul [默认值],...);

不知道各位读者是否还记得在第一部分中插入一个有not null约束的列时,不对该列进行赋值的错误是什么。

我们可以看到,错误信息是没有默认值,实际上,当某一列存在默认值的时候,即便该列有not null属性约束,这个约束也不会生效。因为如果你对该列进行赋值,那么MySQL就会使用你提供的数据去填写对应的列,如果没有进行赋值,但是存在默认值,那么MySQL就是使用默认值去填写对应的列。

3.列描述
列描述(comment)是关于一个列的描述,没有实际意义也不会在表显示,但是我们可以通过show查看表的创建过程,进而查看列描述。列描述通常是给程序员或者数据库管理人员查看的。
create table [表名]([列名] [列类型] comment [描述字段(以字符串形式)],...);

4.0填充
零填充(zero fill)是指我们当某一列为整数类型的时候,假设该整数用十位数字表示,我们知道对于数字10,我们可以使用十进制“10”来表示,也可以“0000000010”来表示。零填充就是将那些没有数字的位填充为0。零填充只是表示方式发生了变化,但是数据的大小并没有被改变。
create table [表名]([列名] [列类型] zerofill,...);

5.主键
主键(primary key) 用来约束表中的某一列,在该列中数据不允许重复,且一张表中只能存在一个主键列,主键通常是一个整数类型搭配着自增长使用,用来作为某一条数据的唯一标识。
create table [表名]([列名] [列类型] primary key,...);

复合主键 :
复合主键,可以让多列一同构成一个主键。
create table [表名]([列名] [列类型] primary key([列名1],[列名2],...),...);

6.自增长
自增长(auto_increment)修饰的列时,当对应的字段不给值,那么将会由系统自动触发,选择当前字段中的最大值+1,若对应字段给值,则将值赋给对应字段。通常和主键搭配,形成逻辑主键。
- 自增长修饰的列必须是整形
- 一张表最多有一个自增长
- 任何字段作为自增长,必须是一个索引。
create table [表名]([列名] [列类型] auto_increment primary key,...);


7.唯一键
唯一键(unique)是用来标识表中的某一列不能冲突的约束,咋一听似乎与主键的约束功能一致,但实际上二者还是有差别的:
- 约束项上:唯一键允许插入内容为NULL(插入内容为空),但是主键不允许。
- 约束数量上:一个表中可以有多个唯一键,但是不可以有多个主键。
我们从实际出发理解一下主键与唯一键的区别:
一个人会拥有多个独一无二的属性,比如说身份证号、生物信息等。这些属性不会因为统计方式的改变而改变。但是对于主键来说,主键通常是用来在一个表中标识某一行数据的在该表中的先后顺序,也就是说主键通常是在表中唯一的,在不同的表中主键信息可能会因为统计方式的改变而改变。
create table [表名]([列名] [列类型] unique,...);

8.外键
外键约束(foreign key)通常用来指定插入列的内容对应的数据,这样写可以一定程度上节省空间,如图12所示,如果将主表中的数据全都加入到从表中,在保证原意的条件下,显然会增大从表的存储空间。
foreign key [从表列] reference [主表列]
//外键约束要创建到从表列


