如何删除 SQL 中的 Not null 约束?

How to delete Not null constraint in SQL?

我刚刚创建了一个 table,如下所示:

CREATE TABLE EMP 
  ( 
     ENO     NUMBER(5, 0) not null, 
     ENAME   VARCHAR2(20 BYTE), 
     SAl     NUMBER(10, 0), 
     DPTNAME VARCHAR2(50 BYTE), 
     EPLACE  VARCHAR2(20 BYTE), 
     DOB     DATE 
  );

现在我想禁用 NOT NULL 约束。我尝试使用 ALTER TABLE EMP MODIFY (ENO NOT NULL DISABLE);,但它显示了一些错误。

你能告诉我哪里出错了吗?

尝试

ALTER TABLE EMP MODIFY (ENO null);

您可以使用 Sachu 的回答来取消限制(顺便说一句,我认为这不值得投反对票)。

要禁用约束,您首先需要找到它的名称,该名称由 Oracle 生成。您可以在 Oracle 的 USER_CONSTRAINTS 视图中找到该名称:查找 "search condition" 为 "ENO" IS NOT NULL 的名称”——在您的问题中,它将是 table 中的唯一约束但在其他情况下,table(甚至列)可能有多个约束。

SQL> CREATE TABLE EMP
   2 (
   3 ENO     NUMBER(5, 0) not null,
   4 ENAME   VARCHAR2(20 BYTE),
   5 SAl     NUMBER(10, 0),
   6 DPTNAME VARCHAR2(50 BYTE),
   7 EPLACE  VARCHAR2(20 BYTE),
   8 DOB     DATE
   9 );

Table created.

SQL> SELECT CONSTRAINT_NAME, SEARCH_CONDITION
  2  FROM USER_CONSTRAINTS
  3  WHERE TABLE_NAME = 'EMP';

CONSTRAINT_NAME SEARCH_CONDITION
--------------- -----------------
SYS_C009208     "ENO" IS NOT NULL

所以 Oracle 给约束的名称是 SYS_C009208。现在您可以禁用它了:

SQL> ALTER TABLE EMP DISABLE CONSTRAINT SYS_C009208;

Table altered.