【问题标题】:Is it a good practice to set the default value of some field/column as NULL in MySQL?在 MySQL 中将某些字段/列的默认值设置为 NULL 是一种好习惯吗?
【发布时间】:2009-12-21 04:31:10
【问题描述】:

这样做有什么缺点?

【问题讨论】:

    标签: sql mysql database-design null data-modeling


    【解决方案1】:

    将其设置为 默认 没有任何缺点,因为一旦您不为其设置值,这很重要。

    如果 value 变为 NULL,它可能会对查找产生影响。这是因为 MySQL 会查看文件,并且跳过已知长度的字段很容易,因为您只需跳过该长度即可。但是,如果一列可能包含 NULL,则需要在进行跳转之前对其进行检查。不过不需要太多时间,所以我认为这并不重要。

    优点显然是节省空间,但存储便宜。毕竟是 2009 年。

    查找内容的最快方法是将所有列设置为 NOT NULL,而是使用空字符串和 -1(或者甚至 0,如果这并不意味着其他东西)之类的东西来存储“null”值。它不会占用太多空间,而且总是更快,因为数据的长度是有保证的。

    但是,如果您的数据库相对较小并且不需要在 2 毫秒内过滤 8 亿行,那么请随意使用 NULL 值。 ;)

    【讨论】:

      【解决方案2】:

      允许列为 null 的缺点会影响业务逻辑 - null 意味着实际上没有关联的值,但可能存在。如果这不适合您的业务规则,则该列不应允许其中存在空值。

      众所周知,NULL 值在某些情况下查询执行成本很高,并且某些数据库不会评估 null 值相等的两列。

      顺便说一句:虽然您可以设置一个 DEFAULT 约束以使列值为空,但这比必要的工作要多。创建或更改表时,列定义包含三个组成部分:

      1. 列名
      2. 列的数据类型
      3. 可选性 - 如果列允许空值存在

      【讨论】:

      • 设置一个默认的 NULL 值是可以的。做一个 SELECT FROM TABLE WHERE COLUMN IS NULL 是不行的……这确实很慢。
      【解决方案3】:

      设置 某些字段/列的默认值为 MySQL中的NULL?

      我认为是的。因为无论数据类型如何,NULL 都占用最少的内存

      【讨论】:

      • 我认为没有 ;-) 节省空间通常是无关紧要的,但是当你不知道如何使用空值时得到奇怪结果的风险会更高。
      【解决方案4】:

      根据您的 DBMS,NULL 将是默认值。也就是说,只要你不提供值,并且没有设置默认值,就会存储一个 NULL(当然,NULL 是不被禁止的)。

      NULLS 的真正代价是在解释值时出现。 SQL 在评估可能涉及 NULL 的表达式时使用了一种奇怪且有时违反直觉的三值逻辑。第三个值是 UNKNOWN,反直觉的部分是 NOT UNKNOWN 等于 UNKNOWN。如果你不小心,你可能会得到错误的结果。

      如果某些条目在 COLUMN 中有 NULL,并且这些条目在现实世界中具有值,则可能会低估 SUM(COLUMN) 之类的统计数据。

      但真正让人头疼的是数据库设计人员和程序员倾向于使用 NULL 来传达某种有意义的信息,而不仅仅是“这里没有数据”。这几乎总是会导致逻辑错误。如果您有数据,请存储数据。如果您没有数据,也别无选择,请存储 NULL。并且不要让自己被缺乏数据所误导。

      【讨论】:

        【解决方案5】:

        仅从列定义中省略 NOT NULL 有时会对性能产生重大影响。所以我已经习惯于尽可能地包含它。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-08-23
          • 2016-04-01
          • 2023-02-15
          • 2011-11-03
          • 2019-05-27
          • 2014-05-17
          相关资源
          最近更新 更多