何时在创建MySQL表列时写入NOT NULL

时间:2015-05-12 08:29:36

标签: mysql sql database null notnull

写作的差异或好处" NOT NULL"在mysql字段创建中......

例如,如果我正在创建这样的表......

CREATE TABLE IF NOT EXISTS game(
id INT(11) NOT NULL AUTO_INCREMENT,
name VARCHAR(128) NOT NULL,
description VARCHAR(200) NOT NULL,
PRIMARY KEY(id)
)

这里,id和name总是有一个值,所以他们的NOT NULL就好了。我明白了。 但是,description是一个可选字段,因此它可以是空白的。

所以,在这种情况下,我应该把Not NULL放在哪里?

3 个答案:

答案 0 :(得分:3)

NULL和空白字段为not the same thing(除非在某些情况下,你是脑死亡的DBMS 咳嗽 Oracle 咳嗽)。

NULL表示未知或不适用,而空白字段表示已知且空白。

这完全取决于你想要如何处理字段本身。例如,让我们考虑你名字的中间首字母。如果您不想区分“未知”和“没有”,请将列设置为NOT NULL,并使用空白值来表示两者 - 这样可以稍微简化您的查询。

但是,如果您想要邮寄所有没有中间名称的客户(出于任何奇怪的原因)而不打扰那些知道的客户,如果他们有一个,你需要能够区分两个班级之间。

答案 1 :(得分:1)

首先,在你的情况下,你真的不必把NOT NULL,如果你把NOT NULL,当你向数据库插入数据时,如果字段使用NOT NULL,它必须放置值然而,如前所述,由paxdiablo提到,对于该字段,NULL并不意味着空白字段,因为空白字段可以是许多空格或一个空格。无论如何,如果不是必须在某个字段中包含值,那么你真的不必使用NOT NULL。(我真的不认为它与braindead DBMS有关或不与@paxdiablo有关)

答案 2 :(得分:0)

我的意见是,NOT NULL适用于那些具有依赖性的字段,例如主键,外键。

我以前在一个函数(a,b,c,d,e)中工作的东西;如果没有输入外键值,它会执行但不返回任何结果并且auto_increment值会增加。这不是一个好习惯。如果使用NOT NULL,当外键值为NULL时,插入将停止,auto_increment值将不会增加。

加成

要处理父记录删除,有一个级联操作,或者您可以手动将其他值更新到记录。