字段 NOT NULL 和 DEFAULT NULL

dr_*_*dr_ 7 mysql null mysql-5.6

这个 MySQL 表让我困惑了一会儿:

mysql> desc quux;
+---------------------------+-----------------------+------+-----+---------+----------------+
| Field                     | Type                  | Null | Key | Default | Extra          |
+---------------------------+-----------------------+------+-----+---------+----------------+
| foobar                    | int(11)               | NO   |     | NULL    |                |
(...)

mysql> show create table quux;
(...)
`foobar` int(11) NOT NULL,
(...)
Run Code Online (Sandbox Code Playgroud)

由于foobar从未使用 DEFAULT 子句创建该字段,因此它会自动分配 DEFAULT NULL。然而,乍一看,这似乎与它也被定义为 NOT NULL 的事实相矛盾。

然后我意识到这个模式旨在foobar在添加新记录时强制插入一个值(和一个非 NULL 值)。

这是一种可以接受的方法,还是有更好的方法?

a_h*_*ame 7

这是完全可以接受的,它基本上是这样说的:

必须为此提供一个值,但我不知道那会是什么。

如果您定义了默认值,则您声称对于任何不提供值的行来说,这是一个合理的值——这对于大多数属性来说并不真正可行。

考虑一个名为的列first_name- 您想确保提供了一个值,但您无法为此想出一个合理的默认值。或者salary在员工表中命名的列。