MySQL列默认值 - 优缺点及是否应该为所有列使用?

7

1) 在表格中为列提供默认值的优缺点是什么?

2) 此外,所有列都应该有默认值吗?我的意思是,这似乎是个好主意...为什么不呢?:)

非常感谢

4个回答

5

1) 提供表格列默认值的优缺点是什么?

优点在于您可以设置默认值,而不使用标准默认值。这还简化了插入语句,因为您不需要指定太多的值。

只要设置合理的默认值,就没有真正的缺点。

2) 此外,所有列都应该有默认值吗?我是说,这似乎是个好主意...为什么不呢? :)

这实际上取决于您的业务逻辑。例如,如果有一个像 "CUSTOMER_NAME" 这样的列,您不可能想出一个好的默认值,那么您就不应该指定一个默认值。但对于其他列,如 "ACTIVE" 或 "DELETED" 这样的布尔类型,您应该指定一个默认值。

希望这回答了您的问题。


4

优点:

  • 在使用引用完整性/外键(一个表中的一列指向另一个表中的一列)时,可以通过将外键列设置为 NULL 来为列设置无链接。例如,如果您有一个家庭表格,其中一列指向一个孩子表格,如果一个家庭没有孩子,则孩子列可以为空。
  • 如果需要,可以提供额外的状态,例如空字符串而不是未使用的状态。

缺点:

  • 在数据集中的每一行上使用了额外的内存位,它不节省内存,如果一个列允许 NULL 值,则使用更多内存。
  • 除了 0 或空字符串之外,程序员还必须处理额外的状态。

黄金法则是不要允许 NULL 列,除非你需要它们。


3

所有列都将具有默认值,无论您是否指定。如果您没有指定,则它将简单地使用该类型的“默认”默认值。

对于允许空值的列,其默认值将为NULL。对于不允许NULL的默认值,例如INTEGER列,其默认值将为0。

当您希望使用除了“默认”默认值之外的其他内容时,应指定默认值。

默认值仅在您插入新记录时应用。

默认值的一个好用例是在安全性中实施最小特权原则。

如果在ACL表中有布尔(TINYINT)字段,如“allowUpdates”和“allowDeletes”,那么应将这些默认值设为FALSE(0),以便在创建新用户时,他们将获得最少权限,直到您特别设置它们。

如果遵循最小特权原则,则攻击者无法通过欺骗系统创建新用户帐户来使系统授予高特权。

因此,如果您不选择适当的默认值,则缺点可能会很严重。优点是您可以覆盖默认值以获得应用程序的合理值。

其他优点包括,在插入记录时,如果您想要特定字段的默认值,则只需不设置它即可。这可以使查询更短,更简单。此外,它使配置可以在数据库中处理。换句话说,您可以更改默认值(在数据库中)而不更改应用程序。


感谢您的帮助性回复! - Graham

1

默认值确实与数据质量和信息的未来使用有关。

数据质量包括合理、深思熟虑的默认值。

具有 null、nil 和空白会在将来使用、操作和分析数据时带来很多问题。

可以具有特定值集的数据通常受益于设置默认值。

真正自由文本的数据,例如 "issue_details" 可能没有默认值,但如果使用默认值,例如 "not given" 它提供了一个更具体的可搜索、排除搜索结果以及在将来使用时一般会产生较少的问题的值。
相反,也针对您的第二点,对于需要一个值且默认值不适用的情况,例如 "user_last_name",则不应使用默认值。

在其他领域中,设置默认值可以是向所有数据用户强调意图的好方法。例如,对于名为“已知问题”的列,默认值可能是“无”,这比 null 更准确、有用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接