mysql约束介绍+本质,null/not null,default,null和default两者区别,comment(列描述),zerofill(格式化显示)

目录

约束

介绍

本质

最终目标

如何约束

是否可以为空(null/not null)

null的含义

默认为null

建表示例

插入示例

设置为not null

建表示例

插入示例

默认值(default)

建表示例

插入示例 

无默认值,不能为空

严格模式下

总结null和default的区别 

null

default

列描述

介绍

示例

建表示例

查看

zerofill

介绍

示例 


约束

介绍

  • 通过约束,强制让我们插入到表中的数据是正确的合法的
  • 类似于编译器,不合法的语法是无法编译成功的

本质

通过技术手段,倒逼着程序员/用户插入正确的数据

  • 也就实现了, 在库中的数据,一定是符合约束的

最终目标

保证数据的完整性和可预期性

如何约束

就是通过一些属性的设置,如果不符合属性的特征,mysql就报错,从而约束人们去插入数据

  • 之前介绍的数据类型是真正的约束字段,但不能只有类型去约束
  • 因为约束条件越多,可以保证我们的数据越精准地符合我们的预期
  • 所以,我们还需要其他条件来约束
  • eg:

 

是否可以为空(null/not null)

null的含义

表示什么都没有,且不参与运算

用select查询null和null+1,都不会有内容:

默认为null

建表示例

默认情况下,该属性为null :

null属性为yes,表示插入数据时该列可以被设置为空

插入示例

设置为not null

建表示例

当我们修改上面的nn列为not null属性:

插入数据时该列不能为空

插入示例

默认值(default)

建表示例

 default+默认值 

默认情况下,default为null

插入示例 

 如果提供了指定的数据,就使用该数据:

如果提供了默认值,且当前未在该列插入数据,就使用设置好的默认值

  • 比如这里两个属性都有自己的默认值,2和null,当我们不提供数据时,就会使用默认值:

无默认值,不能为空

如果没有提供默认值,且该列不能为null,那么该列无法被忽略(即,在指定列插入时,必须带上该列)

  • 我们修改nt列不能为空:
  • (可以看到它提示有两个警告,是因为之前我们插入的两行数据,该列都为null)

  • 当我们忽略该列插入数据,会看到它有警告,但还是插入成功了,且数据被设置为0:
  • (是因为,根据我们的约束设置,nt列必须提供数据,但我们并没有提供,所以MySQL会根据数据类型的默认规则,将其设置为0)
严格模式下
  • 前面的场景,我们并没有打开严格模式,所以mysql会自动为我们处理
  • 如果我们处于严格模式下呢?
  • 就会直接报错噜:
  • 建议在进行数值的处理时,打开严格模式,这样可以更好的约束我们的行为,使我们的行为更符合预期

总结null和default的区别 

null

null和not null限制的是,当你要插入数据时,是否可以插入null值

default

default属性,决定的是你是否有默认值

  • 如果手动提供默认值 -- 忽略该列插入时,就可以使用默认值
  • 如果不提供默认值 -- default依然有,默认被设置为null
  • 如果不提供默认值,且该列不能为空 -- 说明不允许默认值被设置为null,就要求用户必须提供数据(严格模式下)

列描述

介绍

格式为   comment 'xxx'

  • 只是一种描述字段,类似于代码中的注释
  • 可以看作是一种对程序员的软性约束,让你知道这个属性是干嘛用的

示例

建表示例

查看

desc语句看不到comment属性:

但可以通过查看建表语句看到:

zerofill

介绍

只是一种格式化显示,对实际存储不作影响

用于将所有数据的宽度一致化,用0填充直到其最大宽度

示例 

我们创建一个unsigned tinyint类型的id属性,可以看到,它的宽度为3(最大范围为三位数)

如果我们使用了zerofill约束,在显示数据时,就会是下面这样:

如果数值宽度刚好为最大宽度,就不会填充:

当然,它不会影响实际数据库内部存储的数据

转为16进制后,数据不会有影响:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值