我应该给它一个默认值还是让它为Nullable?

时间:2014-12-17 14:49:51

标签: mysql database-migration

我收到一条错误消息说

enter image description here

我突然意识到我忘记了set default value到我的一个实地电话note

我正在考虑如何解决这个问题:

  1. 给它default value
  2. 设为nullable
  3. 由于我对数据库世界很陌生,这是我的问题:

    • 无论哪种方式,我都选择这样做,这有关系吗?它会影响任何一种表现吗?
    • 他们有什么不同吗?

3 个答案:

答案 0 :(得分:1)

  

•它们有什么不同吗?

SQL中的非NULL和NULL之间存在很大差异。没有性能优势,但有很多功能可以使用NULL值:ex。 IFNULL()NULLIF()。对于某些其他功能,在某些情况下,这种行为可能是不可接受的。

  

无论哪种方式,我选择这样做,重要吗?它会影响到吗?   任何形式的表现?

不,它不会。选择您需要/想要的东西。在您的情况下,您应该为列提供默认值。你可以这样做:

ALTER TABLE TableName ALTER columnName SET DEFAULT 'your value';

!如果您的表已有数据,则需要在开始更改其结构之前制作副本

答案 1 :(得分:1)

我将自己的想法投入到这个问题中。对于类似注释部分的内容,可以将默认值设置为"None"(例如)而不是NULL。虽然它不会在性能方面做出很大的改变,但它会显示出明显的差异。根据您向用户显示此数据的方式,您是否希望您的笔记部分根本没有任何内容,或者您​​是否希望它说"没有提供"或什么都不显示?对于这种情况,这是个人偏好的问题。

我唯一建议的是在你的约定中保持一致。如果您在另一张桌子上有一个具有默认值的备注栏,并且这个栏目没有,那么它不一致,虽然可能没有害处,但可能会导致一些挫折/混乱。 / p>

最后,功能明智,确保您正在检查正确的事情。如果您->nullable()并且不想显示NULL结果,请使用WHERE table.note IS NOT NULL。如果您提供默认值say "None"并且不想显示这些值,则WHERE将为WHERE table.note != "None"

希望能提供一些见解!

答案 2 :(得分:0)

性能没有变化。

这只取决于你的需求。

Defaut value =用户忘记填写字段时要设置的值。 例如"英语"适合作为默认语言,因为很多用户选择这种语言。 "麦克"不适合作为默认名字,因为" Mike"不是每个人的默认名字。

NULL和NOT NULL =如果您不希望信息保持为空。 例如"移动电话"可以留空,因为你不需要那些信息。 "电子邮件地址"不能留空,因为你以后需要它发送电子邮件给那个人。