Mysql

欄位 NOT NULL 和 DEFAULT NULL

  • November 24, 2016

這個 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或在員工表中命名的列。

引用自:https://dba.stackexchange.com/questions/156159