【问题标题】:How to add a not null constraint on column containing null values如何在包含空值的列上添加非空约束
【发布时间】:2013-08-26 00:27:27
【问题描述】:

我有一个表,其中有一列包含一些空值。我想在该列上添加 NOT NULL 约束,而不将现有的空值更新为非空值。我想保留现有的空值并检查它们是否包含此列的非空值的未来行。这可能吗?怎么样?

【问题讨论】:

  • 违反自己的约束似乎有点疯狂。要么是,要么不允许为空。通常,那种,嗯,灵活性是在为您的数据库提供数据的应用程序中设置的,而不是在数据库本身中。做你想做的事,那样就是疯狂。 :)
  • 你可以有一个插入/更新触发器来拒绝任何新的空值。但总的来说,这听起来是个坏主意。
  • 一点也不疯狂。我有时会在他们想要保留现有(旧)数据但开始检查任何新(或更新)数据的约束的系统中使用它。

标签: sql oracle plsql oracle11g constraints


【解决方案1】:

哈马德: 我面临这个问题并解决如下:

更改表 thr_empl_info 修改 THR_EM_DESIGNATION_ID 不为空

【讨论】:

    【解决方案2】:

    ALTER TABLE 表名 SET column_name = '0' WHERE column_name 为 NULL;

    ALTER TABLE 表名 MODIFY COLUMN(column_name NUMBER CONSTRAINT constraint_identifier NOT NULL);

    这当然是假设您的列是一个数字,但实际上是一样的,您只需将“0”更改为不为空的默认值。

    【讨论】:

      【解决方案3】:

      您可以添加未经验证的约束 - 它不会查看现有行,但会检查任何新的或更新的行。

      ALTER TABLE mytable MODIFY mycolumn NOT NULL NOVALIDATE;
      

      请注意,除非满足约束条件,否则您将无法更新现有行。

      另外,请注意优化器在制定计划时将无法利用此约束的缺点 - 它必须假设某些行可能仍为空。

      【讨论】:

      猜你喜欢
      • 2022-01-01
      • 2022-01-23
      • 2021-11-02
      • 1970-01-01
      • 1970-01-01
      • 2016-02-14
      • 2017-02-18
      • 2020-08-12
      • 1970-01-01
      相关资源
      最近更新 更多