Mysql
欄位 NOT NULL 和 DEFAULT NULL
這個 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
或在員工表中命名的列。