MySQL列是否应该始终具有默认值?

MySQL列是否应该始终具有默认值?,mysql,ddl,Mysql,Ddl,MySQL列始终具有默认值是最佳做法吗? 这会提高性能吗? 我已将我的列设置为非空,但未指定默认值。 这种做法不好吗?如果您将其指定为非空,那么您应该有一个默认值,除非您控制输入的数据。NOTNULL意味着将始终存在一个值,因此使用默认值是一种良好的做法。是否所有列都必须不为空?否!默认值​​在需要时使用,但不设置性能影响 mysql列上总是有默认值是最佳实践吗 没有 这要看情况而定。 如果要确保输入合理的数据,则应not为notnull列设置默认值。 仅为具有合理默认值的列设置默认值。 如果你

MySQL列始终具有默认值是最佳做法吗?
这会提高性能吗?
我已将我的列设置为
非空
,但未指定默认值。

这种做法不好吗?

如果您将其指定为非空,那么您应该有一个默认值,除非您控制输入的数据。NOTNULL意味着将始终存在一个值,因此使用默认值是一种良好的做法。是否所有列都必须不为空?

否!默认值​​在需要时使用,但不设置性能影响

mysql列上总是有默认值是最佳实践吗

没有

这要看情况而定。
如果要确保输入合理的数据,则应not
notnull
列设置默认值。
仅为具有合理默认值的列设置默认值。
如果你可以不使用
null
就允许
null

这会提高性能吗

它会略微降低插入速度。
但它可能会加快您的选择,因为您不必测试null。
当然,数据库会花费少量时间来设置默认值。

除非您批量插入,否则您不太可能注意到任何延迟。

性能

  • 插入理论上,使用默认值比发送所有值更快。事实上,性能差异是如此之小,你无法衡量它

  • 通常:使用非空值比使用空值更快。特别是索引结构,如果它们不必处理空值,则工作得更快

  • 如果使用NOT NULL则使用默认值

  • 最佳实践

    在现实世界中,你们应该做你们渴望得到的事情

    • 如果要保留信息“我不知道实际值”,请使用空值
    • 如果您不关心是否知道实际值,但希望确保至少存在一个默认值,请使用默认值

    • 如果使用NOTNULL,请始终使用默认值

    示例

    • 生日:对那些用户使用空值,你不知道生日

    • isDisabled:不要使用NULL,而是将默认值设置为0;因此,如果未设置任何内容,则不会禁用用户。你决定了,所以你不需要空值


    这不是普遍适用的。如果说一个列可以为null或者有一个默认值总是好的,那就不是真的。例如,主键字段不能为NULL,但您肯定不会设置默认值。您也不会给用户名字段指定默认值。@Hammerite我同意您不想为这些项目设置默认值,但在这种情况下,您将控制前端将通过验证输入一个值。如果验证输入不为空,则不需要默认值。但是,如果您没有进行验证,并且没有默认值,而有人尝试输入空值,那么就会发生SQLException,这是一种糟糕的做法。实际上,除非确实需要,否则不应该将所有列都设置为非空。