绪论
每日激励:“不是看到希望才坚持,而是坚持了才有希望。—Jack”
绪论:
本章是约束的下半篇,它将带你认识到一些在字段中非常常用的约束条件,自增长AUTO_CREMENT、唯一键UNIQUE KEY 和 外键FOREIGN KEY这三个。它们是我们学习MySQL DDL操作中非常重要且关键的一环,当我们将本章和之前文章也学完后你就对DDL基本完成了,下面我将继续更新在表中查询的高级方法,敬请期待!
————————
早关注不迷路,话不多说安全带系好,发车啦(建议电脑观看)。
1. 自增长AUTO_INCREMENT
auto_increment约束的作用:
当对应的字段,不给值,会自动的被系统触发,系统会从当前字段中已经有的最大值+1操作,得到一个新的不同的值。通常和主键搭配使用,作为逻辑主键。
自增长的特点:
- 任何一个字段要做自增长,前提是本身是一个索引(key一栏有值)
- 自增长字段必须是整数
- 一张表最多只能有一个自增长
实操:
- 创建表tt21,并设置
id为主键和自增长约束
- 当插入数据时:
你不填写值时id就会自增长
- 当你设置id后:id是能插入的
- 当再次插入数据后id的自增长会从你插入的值开始
其中表结构中有一个AUTO_INCREMENT会记录下一次自增长的值。
这也表示着我们在创建表时同样也是能设置自增长开始的值的
如下图设置为从500开始:
其中注意的是,对于自增长的字段必须得设置为主键:
附:直接查看表的下一个自增长的值:
select last_insert_id();
2. 唯一键UNIQUE KEY
一张表中有往往有很多字段需要唯一性,数据不能重复,但是一张表中只能有一个主键:唯一键就可以解决表中有多个字段需要唯一性约束的问题。
唯一键的本质和主键差不多,不同的是:
唯一键允许为空,而且可以多个为空(主键是不能为空的!)
空字段不做唯一性比较。
下面通过实操观察学习:
-
不能出现重复的值:
-
能为NULL空
关于唯一键和主键的区别:
我们可以简单理解成:
- 主键更多的是标识唯一性的。
- 而唯一键更多的是保证在业务上,不要和别的信息出现重复。
理解:
主键是不能为空且不能重复的:如正常公民的身份证
唯一键:它同样是不能重复但可以为空:如填表过程中,假如一个人没qq,而这个qq它本身是不能重复的,但是它是可以填写NULL空的。
主键和唯一键它们是相互互补的
因为主键在表中只能有一个,唯一键就补充了它的只能唯一的不足,为表中一些同样不能重复的字段能够被约束
其中在表结构中
- 主键:PRI
- 唯一键:UNI
附:虽然唯一键可以为空,但同时唯一键也是能设置为非空约束的:
这样就不能插入空了!(就真类似于主键了)
其中注意:
- 一般而言,我们建议将主键设计成为和当前业务无关的字段,这样,当业务调整的时候,我们可以尽量不会对主键做过大的调整。
- 具体指的是在业务上不能重复,我们设计表的时候,需要这个约束,那么就可以将员工工号设计成为唯一键
3. 外键FOREIGN KEY
定义:
外键一般用于定义主表和从表之间的关系:外键约束主要定义在从表上,主表则必须是有主键约束或unique约束。当定义外键后,要求外键列数据必须在主表的主键列存在或为null。
语法(在定义完字段后添加):
foreign key (字段名) references 主表(列)
实操:
学校中:学生班级实例:
- 创建班级表:
- 创建学生表:
其中常识知道:一定是先有班级,才有学生的
- 插入班级(数据):
- 插入学生(数据):
而其中学生插入的班级id(class_id)它是不能出现问题的,也就是班级id,在班级表中是必须得存在的(也就是必须先有班级才能有学生!)
那么为了约束这个问题(先有班级再有学生),那么能将学生表中的class_id和班级表中的id建立外键联系。
外键的作用:
通过这个约束设置到学生的class_id上后,在插入学生信息时填写的class_id就必须和班级表中的id关联(也就是说不能插入没关联的,插入时若class_id在班级表中的id不存在时是无法插入的)
假如你需要插入该班级,就必须先得创建该班级
这样就能重新创建学生表,对class_id字段添加外键约束
班级数据:
当插入时插入没有的班级idclass_id时就会报错(并没有class_id = 3):
总结回来:
- 对于设置了外键约束的字段来说,它关联的外键值,必须是在关联表中是存在的/为null的
- 设置外键约束,能很好的保证某一些特别值(需要保证存在的值)不出现不存在的情况
- 设置外键还能让两个表有一定的关联性(主从表的关联关系)
- 其中关联的外键字段必须是关联表的主键/唯一键列
附:
结构中看见的CONSTRAINT:外键的名字,我们是可以给外键起名字,此处是直接为默认。
本章完。预知后事如何,暂听下回分解。
如果有任何问题欢迎讨论哈!
如果觉得这篇文章对你有所帮助的话点点赞吧!
持续更新大量MySQL细致内容,早关注不迷路。