数据库之表的唯一、自增等七大约束

真正约束字段的是数据类型,但是数据类型约束很单一,需要有一些额外的约束,更好的保证数据的合法性,从业务逻辑角度保证数据的正确性。
今天我们一起使用一下主要的几个约束,null/not null,default, comment, zerofill,primary key,auto_increment,unique。

1、空属性

有两个取值,null(默认)和not null(此列属性不允许为空,必须做数据插入)。
数据库默认字段基本都是字段为空,但是实际开发时,尽可能保证字段不为空,因为数据为空没办法参与运算。
举例使用null:
这里写图片描述
使用not null:
这里写图片描述
在tt1中我们将per_age设为not null,我们可以观察到,
第一次插入数据时只给per_age设置了值,成功。
第二次,只给per_name设置了值,失败。

2、默认值-default

如果某一种数据会经常性的出现某个具体的值,可以在一开始就指定好,在需要真实数据的时候,用户可以选择性的使用默认值。
eg,新建表如下(默认值一般与not null配合使用 ):
这里写图片描述
插入如下数据,观察结果:
这里写图片描述
所以,默认值的生效:数据在插入的时候不给该字段赋值,就使用默认值
我们看一下时间戳的默认值:
这里写图片描述
(desc:查看表的结构)
注意,set和enum不允许设默认值。

3、列描述-comment

comment,没有实际含义,专门用来描述字段,会根据表创建语句保存,用来给程序员或DBA来进行了解。
eg,新建表如下:
这里写图片描述
观察上图,我们用desc是查看不到comment的描述信息的。
我们学一条命令show(查看当前数据库的描述信息),如下:
这里写图片描述
(\G是为了让查看结果格式整齐)
这样,肯定有人以为和注释是一样的,其实不然,comment不等同于注释。
测试如下:
这里写图片描述
(注释用– )
观察到用desc两者都看不到,我们用show试试:
这里写图片描述
可以看到注释是看不出来的。

4、zerofill -自动填充0

如果某一数值列规定了zerofill,则自动把此列变为无符号整数。
若规定了zerofill的数据列,如果数据长度没有达到规定长度,则在数据前自动填充0,
eg: int(5) zerofill 123 –>00123
举例如下:
新建表:
这里写图片描述
查看表结构:
这里写图片描述
可以看到此列变为无符号整数。
我们插入数据:
这里写图片描述
因为我们设置了5位,而数据只有3位,因此前两次自动填充为0。
那如果数据大于5位呢?如下:
这里写图片描述
则没有必要填充。
需要注意的是,zerofill属性只是设置了一种格式化输出而已,数据库内部存储的还是本来的数。
我们可以用hex函数来观察,如下:
这里写图片描述

5、主键约束 - primary key

主键用于唯一约束字段数据,使用主键约束的字段,不能为空,不能重复。
主键所在的列为整数类型,一张表有且只有一个主键。
主键有单主键和复合主键之分。

单主键

举例如下:
这里写图片描述
查看表结构,id的key值为PRI,id为主键
这里写图片描述
插入数据:
这里写图片描述
如上图,第一次插入id相同,插入失败,证明主键不能重复。
第二次插入成功。

复合主键

多个属性组合起来不能重复 eg:1-101
举例如下:
这里写图片描述
id-sushe为复合主键,如下,id和sushe的key值都为PRI.
这里写图片描述
插入数据:
这里写图片描述
成功,插入了1-101即2-101两组数据。
再插入数据,
这里写图片描述
因为2-101重复,插入失败。

删除主键

alter table 表名 drop primary key;
我们以上例中tt7为例:
这里写图片描述
删除后我们插入重复的数就可以了:
这里写图片描述

创建表以后追加主键

alter table 表名 add primary key(字段1);
注意:字段1不能为空,不能重复。
这里写图片描述

6、自增长-auto_increment

auto_increment:当对应的字段,不给值,会自动的被系统触发,系统会从当前字段中已经有的最大值+1操作, 得到一个新的不同的值。
注意:任何一个字段要自增长,前提是本身为索引,(key有值)、自增长必须为整数、一张表有且只能有一个自增长
主键和自增长搭配使用:
id+auto_increment:逻辑主键
举例如下:
这里写图片描述
查看表结构可以看出来id为自增长。
插入数据:
这里写图片描述
可以看出自增值是从1开始的。
若我们设置了自增数值呢?
如下:
这里写图片描述
证明了系统会从当前字段中已经有的最大值+1操作, 得到一个新的不同的值。
那若我们删掉我们设置的数呢?
这里写图片描述
现在只剩下1和2了,我们插入数据:
这里写图片描述
发现是接着之前最大的数的。
**因此,若指定自增数值后,以后的数依次为基础。
若删除指定列后,还是以最大值(已经达到的值)为基础自增。**

7、唯一键-unique

一张表中有往往有很多字段需要唯一性,数据不能重复,但是一张表中只能有一个主键:唯一键就可以解决表中有多个字段需要唯一性约束的问题。
唯一键的本质和主键差不多,唯一键允许为空,但不能重复,一张表可以有多个字段设置唯一,而且可以多个为空,空字段不做唯一性比较,也就是说可以允许多个null值。
证明不能重复,举例如下,id为唯一键:
这里写图片描述
插入数据:
这里写图片描述
再插入:
这里写图片描述
插入失败。
对于空值,插入:
这里写图片描述
再次插入id为空值的数据:
这里写图片描述
证明了空字段不做唯一性比较,可以允许多个null值。

猜你喜欢

转载自blog.csdn.net/baidu_37964071/article/details/80295312