MySQL数据表的约束

真正约束字段的是数据类型,但是数据类型约束很单一,需要有一些额外的约束,更好

的保证数据的合法性,从业务逻辑角度保证数据的正确性。比如有一个字段是email,

要求是唯一的。

表的约束很多,这里主要介绍如下几个:null / not null,default,comment,zerofill,

primary key,auto_increment,unique key ,foreign key。

1. 空属性 (NULL / NOT NULL)

两个值:NULL / NOT NULL,默认值是NULL,但是实际开发时,尽可能保证字段不为

空,因为数据为空没办法参与运算。
在这里插入图片描述
字段为空的意思就是不知道到底是多少,也就没法做比较。

案例:创建一个班级表,包含班级名和班级所在的教室。如果班级没有名字,你不知道

你在哪个班级,如果教室名字可以为空,就不知道在哪上课。
在这里插入图片描述
往班级表里面插数据时,没有给班级所在的教室赋值,插入失败!
在这里插入图片描述

2. 默认值 (DEFAULT)

某一种数据会经常性的出现某个具体的值,可以在一开始就指定好,在需要真实数据的

时候,用户可以选择性的使用默认值。
在这里插入图片描述
默认值的生效:数据在插入的时候如果不给该字段赋值,就使用默认值
在这里插入图片描述

扫描二维码关注公众号,回复: 5095154 查看本文章

3. 列描述 (COMMENT)

列描述:COMMENT,没有实际含义,专门用来描述字段,会根据表创建语句保存,用

来给程序员或DBA来进行了解。
在这里插入图片描述
我们发现通过 DESC 是看不到注释信息的,但是通过 SHOW 建表语句是可以看到的。
在这里插入图片描述

4. ZEROFILL

首先通过 SHOW 语句看看 db1 数据库中的 tt5 表的建表语句:
在这里插入图片描述
可以看到 int(10),这个代表什么意思呢?整型不是4个字节吗?这个10又代表什么呢?

其实如果没有 zerofill 这个属性,括号内的数字是毫无意义的。
在这里插入图片描述
表里的 id 和 salary 列是前一篇文章中插入的数据。
在这里插入图片描述
但是对列添加了 zerofill 属性后,显示的结果就有所不同了。

这次可以看到 id 的值由原来的 100 变成 00100,这就是 zerofill 属性的作用,对结果进

行了格式化输出如果宽度小于设定的宽度(这里设置的是5),自动填充0。

需要注意的是,这只是最后显示的结果,在MySQL中实际存储的还是100。

5. 主键 (PRIMARY KEY)

primary key 用来唯一的约束该字段里面的数据,不能重复,不能为空,一张表中最多

只能有一个主键。

主键所在的列通常是整数类型!!!
在这里插入图片描述
在 KEY 那一栏中,PRI 表示 id 这个字段是主键。

在创建表的时候,在所有字段之后,使用 primary key (主键字段列表)来创建主键,如

果有多个字段作为主键,可以使用复合主键。
在这里插入图片描述
这张表里的 id 和 course 共同构成复合主键!

① 当表创建好之后也是可以再追加主键的!!!

语法:alter table 表名 add primary key (字段列表)

② 主键约束:主键对应的字段中不能重复,一旦重复,操作失败。
在这里插入图片描述
③ 主键创建好之后也是可以删除的。

语法:alter table 表名 drop primary key;
在这里插入图片描述

6. 自增长 (AUTO_INCREMENT)

当对应的字段不给值时,会自动的被系统触发,系统会从当前字段中已经有最大值+1操

作,得到一个新的不同的值。通常和主键搭配使用,作为逻辑主键!

特点:

① 任何一个字段要做自增长,前提是本身是一个索引(key一栏有值);

② 自增长字段必须是整数;

③ 一张表最多只能有一个自增长。
在这里插入图片描述
在这里插入图片描述
在插入后获取上次插入的 AUTO_INCREMENT 的值(批量插入获取的是第一个值)
在这里插入图片描述
索引:**

在关系数据库中,索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的

一种存储结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值

的数据页的逻辑指针清单。

索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容。

索引提供指向存储在表的指定列中的数据值的指针,然后根据您指定的排序顺序对这些

指针排序。数据库使用索引以找到特定值,然后顺指针找到包含该值的行。这样可以使

对应于表的SQL语句执行得更快,可快速访问数据库表中的特定信息。

7. 唯一键 (UNIQUE)

一张表中有往往有很多字段需要唯一性,即数据不能重复,但是一张表中只能有一个主

键,唯一键就可以解决表中有多个字段需要唯一性约束的问题

** 唯一键的本质和主键差不多,唯一键不能重复但可以为空,而且可以多个为空,空字

段不做唯一性比较!!!
在这里插入图片描述
在这里插入图片描述
唯一约束不能重复!
在这里插入图片描述
但可以为空!!!

8. 外键 (FOREIGN KEY)

外键用于定义主表和从表之间的关系,表示不是自己的主属性,却是其他表的主属性。

外键约束主要定义在从表上,主表则必须是有主键约束或唯一性约束。

当定义外键后,要求外键列数据必须在主表的主键列存在或为NULL!

语法:foreign key (字段名) references 主表(列)

student 学生表
在这里插入图片描述
myclass 班级表
在这里插入图片描述
如果把班级表中的数据全部都设计在每个学生表的后面,这样就会造成数据冗余,所以

最好的办法就是让 student 表的 class_id 列和 myclasss 表的 id 列形成关联关系,即外

键约束。

对上面的示意图进行设计:

① 先创建主表:
在这里插入图片描述
② 再创建从表:
在这里插入图片描述
③ 正常插入数据:
在这里插入图片描述在这里插入图片描述
④ 插入一个班级号为30的学生,因为没有这个班级,所以插入不成功
在这里插入图片描述
⑤ 插入班级 id 为 null ,比如来了一个学生,目前还没有分配班级
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_43508801/article/details/86303511