赞
踩
目录
- 通过约束,强制让我们插入到表中的数据是正确的合法的
- 类似于编译器,不合法的语法是无法编译成功的
本质
通过技术手段,倒逼着程序员/用户插入正确的数据
- 也就实现了, 在库中的数据,一定是符合约束的
最终目标
保证数据的完整性和可预期性
就是通过一些属性的设置,如果不符合属性的特征,mysql就报错,从而约束人们去插入数据
- 之前介绍的数据类型是真正的约束字段,但不能只有类型去约束
- 因为约束条件越多,可以保证我们的数据越精准地符合我们的预期
- 所以,我们还需要其他条件来约束
- eg:
null的含义
表示什么都没有,且不参与运算
用select查询null和null+1,都不会有内容:
建表示例
默认情况下,该属性为null :
null属性为yes,表示插入数据时该列可以被设置为空
插入示例
建表示例
当我们修改上面的nn列为not null属性:
插入数据时该列不能为空
插入示例
default+默认值
默认情况下,default为null
如果提供了指定的数据,就使用该数据:
如果提供了默认值,且当前未在该列插入数据,就使用设置好的默认值
- 比如这里两个属性都有自己的默认值,2和null,当我们不提供数据时,就会使用默认值:
无默认值,不能为空
如果没有提供默认值,且该列不能为null,那么该列无法被忽略(即,在指定列插入时,必须带上该列)
- 我们修改nt列不能为空:
- (可以看到它提示有两个警告,是因为之前我们插入的两行数据,该列都为null)
- 当我们忽略该列插入数据,会看到它有警告,但还是插入成功了,且数据被设置为0:
- (是因为,根据我们的约束设置,nt列必须提供数据,但我们并没有提供,所以MySQL会根据数据类型的默认规则,将其设置为0)
严格模式下
- 前面的场景,我们并没有打开严格模式,所以mysql会自动为我们处理
- 如果我们处于严格模式下呢?
- 就会直接报错噜:
- 建议在进行数值的处理时,打开严格模式,这样可以更好的约束我们的行为,使我们的行为更符合预期
null
null和not null限制的是,当你要插入数据时,是否可以插入null值
default
default属性,决定的是你是否有默认值
- 如果手动提供默认值 -- 忽略该列插入时,就可以使用默认值
- 如果不提供默认值 -- default依然有,默认被设置为null
- 如果不提供默认值,且该列不能为空 -- 说明不允许默认值被设置为null,就要求用户必须提供数据(严格模式下)
介绍
格式为 comment 'xxx'
- 只是一种描述字段,类似于代码中的注释
- 可以看作是一种对程序员的软性约束,让你知道这个属性是干嘛用的
建表示例
查看
desc语句看不到comment属性:
但可以通过查看建表语句看到:
介绍
只是一种格式化显示,对实际存储不作影响
用于将所有数据的宽度一致化,会用0填充直到其最大宽度
示例
我们创建一个unsigned tinyint类型的id属性,可以看到,它的宽度为3(最大范围为三位数)
如果我们使用了zerofill约束,在显示数据时,就会是下面这样:
如果数值宽度刚好为最大宽度,就不会填充:
当然,它不会影响实际数据库内部存储的数据
转为16进制后,数据不会有影响:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。