w(゚Д゚)w,我是云边有个稻草人。
《MySQL》本篇文章所属专栏---持续更新中w(゚Д゚)w

目录
[2、default 约束](#2、default 约束)
[【not null 和 default 】](#【not null 和 default 】)
[3、列描述 comment](#3、列描述 comment)
[5、主键---primary key](#5、主键—primary key)
正文开始------
真正约束字段的是数据类型,但是数据类型约束很单一,需要有一些额外的约束,更好的保证数据的合法性,从业务逻辑角度保证数据的正确性。比如有一个字段是email,要求是唯一的。
**表的约束:**表中一定要有各种约束,通过约束,让我们未来插入数据库表中的数据是符合预期的。约束的本质是通过技术手段,倒逼程序员,插入正确的数据。反过来,站在mysql的视角,凡是插入进来的数据,都是符合数据约束的!
**约束的最终目标:**保证数据的完整性和可预期性。
表的约束很多,这里主要介绍如下几个: null/not null,default, comment, zerofill,primary key,auto_increment,unique key 。
1、非空约束
简而言之,如果有 not null 约束,那就不允许插入 null
- 两个值:null(默认的)和not null(不为空)
- 数据库默认字段基本都是字段为空,但是实际开发时,尽可能保证字段不为空,因为数据为空没办法参与运算。
案例: 创建一个班级表,包含班级名和班级所在的教室。 站在正常的业务逻辑中:
- 如果班级没有名字,你不知道你在哪个班级
- 如果教室名字可以为空,就不知道在哪上课
所以我们在设计数据库表的时候,一定要在表中进行限制,满足上面条件的数据就不能插入到表中。这就是"约束"。




2、default 约束
默认值:某一种数据会经常性的出现某个具体的值,可以在一开始就指定好,在需要真实数据的时候, 用户可以选择性的使用默认值。
默认值的生效:数据在插入的时候不给该字段赋值,就使用默认值

【not null 和 default 】

如果没有设置default,default默认是NULL。
注意:not null和defalut一般不需要同时出现,因为default本身有默认值,不会为空
3、列描述 comment
列描述:comment,没有实际含义,相当于注释,专门用来描述字段,会根据表创建语句保存,用来给程序员或DBA来进行了解。



4、zerofill
刚开始学习数据库时,很多人对数字类型后面的长度很迷茫。通过show看看t15表的建表语句:


可以看到int(10),这个代表什么意思呢?整型不是4字节码?这个10又代表什么呢?
其实没有zerofill这个属性,括号内的数字是毫无意义的,一会你就明白了。
下面我们通过实际案例来了解一下 zerofill 的作用,见下:

这次可以看到b的值由原来的2变成0000000002,这就是zerofill属性的作用,如果宽度小于设定的宽度(这里设置的是10),自动填充0。要注意的是,这只是最后显示的结果,在MySQL中实际存储的还是2。(细节一)
为什么是这样呢?我们可以用hex函数来证明。

将int(10)修改成int(4)试验一下,见下:

细节二:为什么默认显示宽度是 10?
INT默认显示宽度为10,是 MySQL 基于INT有符号类型的最大显示位数设计的,同时也可结合无符号INT理解这一默认值的合理性:
- 有符号 INT 的最大数字位数 :有符号
INT的最大值是2147483647,共 10 位数字 (2+9 位,总计 10 位);最小值是-2147483648,共 11 位(包含负号)。MySQL 选择 10 作为默认值,是取无符号位时的最大位数(也是最常用的 "有效数字位数"),作为通用的默认显示宽度。- 无符号 INT 的补充案例 :无符号
INT(UNSIGNED INT)的取值范围是0到4294967295,其最大值4294967295共 10 位数字 (4+9 位)。也就是说:无论是有符号INT的最大值(10 位),还是无符号INT的最大值(10 位),核心显示位数均为 10 位。这进一步解释了 MySQL 将10作为INT显示宽度默认值的原因 ------ 它能同时覆盖有符号 / 无符号INT最大值的显示位数需求。- 设计初衷 :显示宽度的设计目的是为了格式化输出 (比如用
ZEROFILL补零:INT(5) ZEROFILL存储123会显示00123),而10是能覆盖有符号 / 无符号INT最大值显示位数的 "通用默认值"。
5、主键---primary key
主键:primary key用来唯一的约束该字段里面的数据,不能重复,不能为空,一张表中最多只能有一个 主键;主键所在的列通常是整数类型。
主键约束:主键对应的字段中不能重复,一旦重复,操作失败。
案例:创建表的时候直接在字段上指定主键,见下:


删除已经存在的主键:
sql
alter table 表名 drop primary key;

随后再往表里面插入数据,就可以成功插入:

当表创建好以后但是没有主键的时候,可以再次追加主键,How?
sql
alter table 表名 add primary key(字段列表)

复合主键
在创建表的时候,在所有字段之后,使用primary key(主键字段列表)来创建主键,如果有多个字段 作为主键,可以使用复合主键。

完------

至此结束------
我是云边有个稻草人
期待与你的下一次相遇!