关于数据库约束的话题,今天来进一步讲解,之前说过,数据类型本身就是一种约束。数据库是和数据打交道的,所以要对数据的管理有非常完整的约束体系。今天我们来谈一谈表结构的约束,下一篇再来讲表的增删查改的操作~
表的约束很多,这里主要介绍如下几个: null/not null,default, comment, zerofill,primary key,
auto_increment,unique key
目录
两个值:null(默认的)和not null(不为空)
数据库默认字段基本都是字段为空,但是实际开发时,尽可能保证字段不为空,因为数据为空没办法参与运算。
注意:这里的null和语言级别的null表示的含义不一样,数据库层面的null表示没有值的意思,千万不要混淆。
默认值:某一种数据会经常性的出现某个具体的值,可以在一开始就指定好,在需要真实数据的时候,用户可以选择性的使用默认值。
举个栗子:
对比一下不加default:
我们发现我们这时候不给值就变成了NULL,表示没有值的意思。
我们发现,not null和default同时出现时,not null就毫无意义,这时候以default为准。
列描述:comment,没有实际含义,专门用来描述字段,会根据表创建语句保存,用来给程序员或DBA来进行了解。
可以理解为语言级别的注释。
举个栗子:
刚开始学习数据库时,很多人对数字类型后面的长度很迷茫。通过show看看t17表的建表语句:
我们给a和b两列插入数据并显示时对比显示结果的特点:
我们发现int(5)后面的参数5意思是:当显示的数字位数不够5位时,并且这个类型被赋予了zerofill字段,我们就在前面补0,直到够5位。 如果超过5位就正常显示即可。
实际中,这个属性我们并不经常使用。
主键:primary key用来唯一的约束该字段里面的数据,不能重复,不能为空,一张表中最多只能有一个主键;主键所在的列通常是整数类型。
举个栗子:
举个栗子:
删除主键时,drop primary key不用指定哪个列是主键。添加主键时,add primary key(列名)这时候需要指明哪个列被设置为了主键。
在创建表的时候,在所有字段之后,使用primary key(主键字段列表)来创建主键,如果有多个字段作为主键,可以使用复合主键。
举个栗子:
当设置符合主键时,插入的数据中,局部的主键冲突,照样可以插入成功。如果设置的复合主键中,所有数据都冲突,插入失败。
auto_increment:当对应的字段,不给值,会自动的被系统触发,系统会从当前字段中已经有的最大值+1操作,得到一个新的不同的值。通常和主键搭配使用,作为逻辑主键。
自增长的特点:
1、任何一个字段要做自增长,前提是本身是一个索引(key一栏有值)
2、自增长字段必须是整数
3、一张表最多只能有一个自增长
举个栗子:
我们从上面的演示结果发现,我们设置auto_increment第一次插入插入时默认从1开始。其次,我们当删除最大的当前auto_increment表行内容(3)时,下次默认自增时是从(3+1)历史最大值+1开始计算的。
我们使用auto_increment不能仅仅使用这个属性,否则创建表是不成功的。我们必须使用在具有唯一属性的列中,比如primary key或unique(下面讲)。
auto_increment字段里面的值是不能重复的。
一张表中有往往有很多字段需要唯一性,数据不能重复,但是一张表中只能有一个主键:唯一键就可以解决表中有多个字段需要唯一性约束的问题。
唯一键的本质和主键差不多,唯一键允许为空,而且可以多个为空,空字段不做唯一性比较。
举个栗子:
当该表中没有主键时,如果设置一个唯一键并且设置not null字段,那么这个列属性就变成了主键!
实际上主键和唯一键不是用来比较的,主键和唯一键是相辅相成的。主键最好使用不可修改的属性来作为主键,基本与业务无关的属性做主键。
像qq、电话号码等不太适合做主键。
只使用主键时,没有唯一键:
我们发现,id设置为主键,qq不能设置为主键了,所以qq有重复的可能性,这在现实生活中显然是不合理,所以我们要保证qq也是具有唯一性的,所以我们要使用唯一键来保证其它字段的唯一性。
使用主键和唯一键:
我们把id设置为主键,qq和电话设置为唯一键。
这时候我们发现插入id、qq、电话时只要有一个重复就插入失败。
外键用于定义主表和从表之间的关系:外键约束主要定义在从表上,主表则必须是有主键约束或unique约束。当定义外键后,要求外键列数据必须在主表的主键列存在或为null。
语法:
foreign key (字段名) references 主表(列)
如果我们没有外键时,
举个栗子:
这时候我们发现创建的从表中李四对应的10号班级在主表中竟然没有对应!这显然是不合理的!这时候需要添加外键约束条件。
使用外键约束建立举个栗子:
所以从上面的演示说明,这时候我们插入时,从表中的id必须在主表中有对应的id才能插入。当我们删除主表某一个字段信息时,只有从表中对应的所有id都被删除后,主表才能删除成功。
外键是用来实现表和表之间关系的字段,其实只是我们自己知道,但是只要是操作,就可能犯错误。为了强约束表之间的关系,需要添加外键约束,添加了外键约束,mysql才会帮你维护表之间的逻辑关系。
看到这里,给博主点个赞吧~