MySQL数据库 -- 表的约束

本文详细讲解了数据库表结构约束,包括null/notnull、default、zerofill、主键(auto_increment)、唯一键以及外键的相关概念和实战示例。掌握这些规则有助于确保数据一致性与准确性。
摘要由CSDN通过智能技术生成

   

        关于数据库约束的话题,今天来进一步讲解,之前说过,数据类型本身就是一种约束。数据库是和数据打交道的,所以要对数据的管理有非常完整的约束体系。今天我们来谈一谈表结构的约束,下一篇再来讲表的增删查改的操作~

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

目录

空属性

默认值

not null 和default同时出现时

列描述

zerofill 

主键

表中删除主键 

 表中添加主键

复合主键

自增长

注意

唯一键

当唯一键设置not null时 

主键和唯一键的区别

我们来举一个比较贴合实际的栗子

外键

外键 vs外键约束


空属性

两个值:null(默认的)和not null(不为空)
数据库默认字段基本都是字段为空,但是实际开发时,尽可能保证字段不为空,因为数据为空没办法参与运算。

注意:这里的null和语言级别的null表示的含义不一样,数据库层面的null表示没有值的意思,千万不要混淆。

默认值

默认值:某一种数据会经常性的出现某个具体的值,可以在一开始就指定好,在需要真实数据的时候,用户可以选择性的使用默认值。

举个栗子:

对比一下不加default: 

我们发现我们这时候不给值就变成了NULL,表示没有值的意思。 

not null 和default同时出现时

我们发现,not null和default同时出现时,not null就毫无意义,这时候以default为准。 

列描述

列描述:comment,没有实际含义,专门用来描述字段,会根据表创建语句保存,用来给程序员或DBA来进行了解。

可以理解为语言级别的注释。

举个栗子:

zerofill 

刚开始学习数据库时,很多人对数字类型后面的长度很迷茫。通过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时 

        当该表中没有主键时,如果设置一个唯一键并且设置not null字段,那么这个列属性就变成了主键! 

主键和唯一键的区别

        实际上主键和唯一键不是用来比较的,主键和唯一键是相辅相成的。主键最好使用不可修改的属性来作为主键,基本与业务无关的属性做主键。 

像qq、电话号码等不太适合做主键。

我们来举一个比较贴合实际的栗子

只使用主键时,没有唯一键:

        我们发现,id设置为主键,qq不能设置为主键了,所以qq有重复的可能性,这在现实生活中显然是不合理,所以我们要保证qq也是具有唯一性的,所以我们要使用唯一键来保证其它字段的唯一性。

使用主键和唯一键:

我们把id设置为主键,qq和电话设置为唯一键。

这时候我们发现插入id、qq、电话时只要有一个重复就插入失败。

外键

外键用于定义主表和从表之间的关系:外键约束主要定义在从表上,主表则必须是有主键约束或unique约束。当定义外键后,要求外键列数据必须在主表的主键列存在或为null。

语法:

foreign key (字段名) references 主表(列)

如果我们没有外键时,

举个栗子:

        这时候我们发现创建的从表中李四对应的10号班级在主表中竟然没有对应!这显然是不合理的!这时候需要添加外键约束条件。 

使用外键约束建立举个栗子:

         所以从上面的演示说明,这时候我们插入时,从表中的id必须在主表中有对应的id才能插入。当我们删除主表某一个字段信息时,只有从表中对应的所有id都被删除后,主表才能删除成功。

外键 vs外键约束

        外键是用来实现表和表之间关系的字段,其实只是我们自己知道,但是只要是操作,就可能犯错误。为了强约束表之间的关系,需要添加外键约束,添加了外键约束,mysql才会帮你维护表之间的逻辑关系。

看到这里,给博主点个赞吧~

  

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值