mysql 中 not null 和 default 的使用


我们在进行数据库表设计的时候,往往针对一个字段会有一些约束,其中在使用 not nulldefault 这两个约束的时候,我就会产生一种恍惚:感觉这俩连用有点重复定义的感觉。

例如 我们规定一个 字段 not null default 5 意思想要表达的是 这个字段不能为空,如果为空的话默认就赋值为5. 那么按照这个理解,对于not null已经规定了这个字段不为空,那自然也就没有必要再default 5因为default 5是在字段为空的时候在回起作用的,现在已经not null还定义default 5干嘛呢?反过来既然一个字段default 5默认在空的时候赋值为5,那么自然也就会不会出现空的场景,那干嘛还重复写一遍not null有什么意义呢?

原因是因为我对于空的理解是错误的。这也是计算机语言对于空值的界定问题,不同的语言对于空的理解是不同的。空代表的到底是null、还是 空串 、还是什么也没有呢?这里mysql属于面向对象系列的语言,它认为的空指的是什么也没有,而null并不是空,null也是一个值,这个值叫null而已。

所以 如果一个字段 只进行了 default 约束,那么他是可以指定为null的。如果你在insert 的时候不指定这个字段他才会赋值为默认值。如果你指定了null,那么存的就是null
如果一个字段 只进行了 not null 约束,那么他就永远不能为null,但是也不会有默认值。如果你inster 的时候制定这个字段为null 那么就会报Column 'xxx' cannot be null,如果你什么也不填,那么就会报Field 'xxx' doesn't have a default value

如果连用 not null default 5 可以保证这个字段一定有值,且值不为 null。如果你inster 不填那就是默认值5,如果你填了null 那就会报错。


评论