【MySQL】表的约束

在这里插入图片描述

点赞👍👍收藏🌟🌟关注💖💖
你的支持是对我最大的鼓励,我们一起努力吧!😃😃

前面我们把列名称和类型都了解了,但是在实际查表得时候它们后面是什么东西呢?今天就来说一说!

在这里插入图片描述

前面我们说过数据类型是表的一种约束,真正约束字段确实数据类型,但是只有数据类型这一种约束在建表的时候确实挺单一的。所以需要有一些额外的约束,更好的保证数据的合法性,从业务逻辑角度保证数据的正确性。

表的约束到底是什么意思呢?到底约束谁的呢?
今天如果没有约束那你就可以想怎么写就怎么写,比如体重那一列插入QQ号、身高插入身份证号,你能保证你不会插错吗?所以,

表中一定要有各种约束,通过约束,让我们未来插入数据库表中的数据是符合预期的。约束本质是通过技术手段,倒逼程序员,插入正确的数据。反过来,站在mysql的视角,凡是插入进来的数据,都是符合数据约束的!

约束的最终目标:保证数据的完整性和可预期性。 因此需要更多的约束!

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

1.空属性

在C/C++语言NULL一直代表的是0,但是在MySQL这里NULL真的代表没有。NULL 真的什么都没有, ‘ ’ 空串是有的只不过这个串是空的。

NULL也不会参与计算。

在这里插入图片描述

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

在建表的时候把列名称和列类型后面还要在跟上这一列是否为空,可以不带,不带就默认允许为空,如果带比如说not null就代表这一列不能为空。

在做表插入的时候有一列就不想为空就可以设置not null属性,如注册账号,有几列要求你必要要填的,不填就不能提交。就可以在设计这一列的时候给not null属性。

创建一个班级表,包含班级名和班级所在的教室。
站在正常的业务逻辑中:

  • 如果班级没有名字,你不知道你在哪个班级
  • 如果教室名字可以为空,就不知道在哪上课

所以我们在设计数据库表的时候,一定要在表中进行限制,满足上面条件的数据就不能插入到表中。这就是“约束”。

create table if not exists myclass(
     class_name varchar(20) not null,
     class_room varchar(20) not null,
     other varchar(20)
     );

Null这里代表未来这一列是否为空,这里是no表示这一列未来不能为空,yes表示这一列未来可以为空。

在这里插入图片描述

然后我们在查看建表的语法,这里mysql做了优化。我们发现other这一列我们是只写了一个varchar,没有指定not null,默认是null的,然后面加了一个default null,这里表示你想插就插,不插这一类就给默认值null。

在这里插入图片描述

我们接下来看是如何约束的

我们先做的是全列插入,可以插入也完全没毛病,也符合预期,非空约束,我确实没有空。

在这里插入图片描述

other这一列去掉,我不插,发现用的是默认值null,也符合预期,因为我没加非空约束

在这里插入图片描述

现在把class_room 也都去掉,发现不允许插入,报错是没有默认值

在这里插入图片描述

class_room不去掉,但是我不知道这个教室在哪里,所以我设置为null,发现也不能插。报错不允许为空

在这里插入图片描述

这就和上面other形成鲜明对比。没有不指定not null,后面带了默认值。然后不插的时候用的就是这个默认值插了就用你插入的值。但是指定not null了后面就不带默认值了,你不插说你没有默认值,你插null说你插的不对。

在这里插入图片描述

这就是非空约束,换句话说只要某列设置了not null,必须要插具体值,不插因为后面没有默认值就报错,插入null也报错。设置默认为null,可以不插用的是后面带的默认值。 关于这个默认值的问题结合下面一起说。

2.默认值

default代表默认值,有时候插入时你的表可能有多列,但是可能并没有把每一列都指明要插入什么数据,在有的没有指明要插入什么数据的时候,这个默认值就起效果了。

默认值:某一列会经常性的出现某个具体的值,可以在一开始就指定好,用户输了就用用户的,用户没输就用默认的。

就比如一张表里面性别这一列默认设为男,你如果不输就默认为男,你输入了女或者男就用你输入的。

在这里插入图片描述

可以看到指明为not null 这里就是no,没有指明就是yes说明这一列可以为空,另外指明了default,就用指定的default。 前面的null先不用管。

在这里插入图片描述

首先全列插入,虽然有默认值,但是我自己指明要插的是什么,就用自己指明的。

在这里插入图片描述

当前我就插入一个name,也是可以插入的,因为age,gender默认可以为空,然后用默认值

在这里插入图片描述

这就是默认值。default 如果设置了,用户将来插入,有具体的数据,就用用户的,没有就用默认的。如果自己没设置就默认为null,如果设置了默认的就用自己设置好的默认的。

那not null和default有什么关系呢?

既可以指定not null也可以指定default是没有问题的。

在这里插入图片描述

注意设置过not null后面mysql就不会给我带default了,说明这一列不允许为空。

评论 83
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值