我有一张表格,当我describe
时:
mysql> DESC my_table;
+------------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+----------------+
| contact_id | int(11) | NO | PRI | NULL | auto_increment |
| location | varchar(20) | YES | | NULL | |
| city | varchar(20) | YES | | NULL | |
| state | varchar(2) | YES | | NULL | |
+------------+-------------+------+-----+---------+----------------+
4 rows in set (0.01 sec)
我的问题是:为什么主键contact_id
Default
显示为NULL
?
我为列创建了NOT NULL
的表格,而Primary Key
无论如何都不能NULL
。
Null
NO
和Default
如何成为NULL
?
答案 0 :(得分:4)
它不能为空的事实使得“默认”列的内容无关紧要。他们在'默认'列中使用'null',否则他们需要另一个魔术值来表示'无关','未使用',结束。
不要担心。
答案 1 :(得分:2)
NOT NULL
用于表示该字段不能为空。在您的情况下,主键字段contact_id
在属性Null
中正确显示为“否”。数据类型规范中的Default
子句指示列的默认值。您的主键字段contact_id
没有任何默认值。所以它显示为NULL
。
答案 2 :(得分:0)
请放心,即使默认列显示主键字段的(NULL)
值,也无关紧要。当Default有这个(NULL)值时,让我们列出每个案例:
如果您的SQL请求为主要字段提供值:默认不被调用
如果您的SQL请求不提供值但是是自动增量字段:不调用Defaut
如果您的SQL请求没有提供值且该字段不是自动增量并且可以为null:调用默认值并插入NULL
如果您的SQL请求没有提供值且该字段不是自动增量且不能为空:默认被调用但是您收到错误,告诉您此字段“不能为空“
希望这有帮助。
答案 3 :(得分:0)
在您的情况下,默认列中的NULL表示用户未将任何值指定为默认值。