列可为空性/可选性:NULL与NOT NULL

时间:2010-01-06 22:20:55

标签: mysql database-design data-modeling

除了主/外键字段之外,是否有理由支持或反对在mysql表中将某些字段设置为NULLNOT NULL

4 个答案:

答案 0 :(得分:5)

说实话,这完全取决于你的域名。从功能上讲,它对数据库引擎几乎没有什么影响,但是如果你想要一个定义良好的域,通常最好让数据库和应用层都反映出你对用户的要求。

如果用户输入“显示名称”是否属实,则无论如何都要将该列标记为可为空。另一方面,如果您要求“显示名称”,则应在数据库中将其标记为非null,并在应用程序中强制执行约束。通过加倍约束,您可以确保在前端更改时,域仍然是完全合格的。

答案 1 :(得分:3)

MySQL在字段上有NOT NULL条件,但这不会阻止您插入“空”数据。无法将字段标记为“必需”。

正如Pekka所说,你应该进行某种验证,以防止在你的应用程序中更高层次。

答案 2 :(得分:3)

这不是MySQL特定的东西 - 我所知道的每个数据库都允许定义具有约束的列,该约束允许列中的NULL值,或者不允许这种情况发生。

将列定义为NOT NULL表示始终必须存在与数据类型匹配的值。 NULL是一个标记值,它的'数据类型超越了为列定义的任何内容。

如果列是外键,则在中将值插入当前表之前,该值也必须已存在于相关表中。 DEFAULT约束在定义为NOT NULL的列上很常见,但不是必需的,因此如果尝试将NULL插入这些列,则将使用适当的值填充列。回到外键,外键列可以为空,这意味着关系是可选 - 业务规则允许没有关系。

何时应该为NULL&是否使用NULL?


理想情况下,每列应为NOT NULL,但这实际上取决于业务规则的要求。

答案 3 :(得分:2)

我不知道你如何在mySQL中定义一个必填字段,关心开导我?我真的不知道。

无论如何,即使可以做到这一点,我也很难想到一个有意义的场景。 IMO,你必须更早地验证错误(=错误的空)数据。在任何进入数据库之前,应该进行验证,卫生和切割。应该发生数据库错误的唯一时间是出现异常情况,例如当数据库物理上无法访问时。