对不起,我的英语不好
使用INNODB时,列必须为0还是为null?
如果联接的列定义为0,会发生问题吗?
最后,在性能方面哪个更好?
谢谢。
答案 0 :(得分:0)
忽略该问题。您不必提供DEFAULT
值。您不必声明一列NULL
(或NOT NULL
)。
相反...
考虑一下应用程序。
情况1:您的应用程序将总是具有该列的值,并且它将总是指定该值。然后将列声明为NOT NULL
而不提供DEFAULT
是有意义的。
情况2:您还没有任何价值。示例:该表具有start_date
和end_date
。您在事物“开始”时创建了一行,因此您填写了start_date
(请参阅案例1),但将end_date
留为空白。 “空”可以编码为NULL
和DEFAULT NULL
。稍后,您UPDATE
在表格中用真实值填充end_date
。
情况3:该表具有一个“计数器”。最初添加一行时,计数器需要以“ 1”开头。稍后您将UPDATE ... SET counter=counter+1
。您既可以在创建行时将“ 1”显式放入,也可以在插入时省略该值,但将列声明为NOT NULL DEFAULT '1'
NULL
可以表示“尚未填写”(案例1),“不知道值”,“使用默认值”以及其他一些内容。这是一个应用程序选择。
NULL
还有其他用途。除非您用于NULL
,否则声明每一列NOT NULL
。
如果在INSERTing
时指定了所有列,则不需要DEFAULTs
。 DEFAULTs
是一种便利,而不是必需。如果没有DEFAULT
,则数字NOT NULL
的列将为“ 0”,而字符串则为''
。
性能-可能不是问题。您有没有我们应该讨论的特定示例?
JOINing
-我将避免加入可能包含NULL
的列。这种情况在“现实生活”中很少发生,因为一个人将一列中的行的唯一标识符与另一张表中的一列相结合:
FROM A JOIN B ON B.id = A.b_id
也就是说,B.id
可能是B的PRIMARY KEY
,因此不能是NULL
。另一方面,A.b_id
可以是NULL
,以指示B
中没有与A
中的行相对应的行。没问题。