这个 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,
(...)
由于该foobar
字段从未使用 DEFAULT 子句创建,因此它会自动分配为 DEFAULT NULL。然而,乍一看,这似乎与它也被定义为 NOT NULL 的事实相矛盾。
然后我意识到这个模式旨在在foobar
添加新记录时强制插入一个值(和一个非 NULL 值)。
这是一种可以接受的方式,还是有更好的方式?
这是完全可以接受的,它基本上说:
如果您定义一个默认值,则您声称对于任何不提供值的行来说这是一个合理的值——这对于大多数属性来说实际上是不可行的。
考虑一个名为的列
first_name
- 您想确保提供了一个值,但是您无法为此提供一个合理的默认值。salary
或在员工表中命名的列。