oracle 如何在创建表的过程中同时添加UNIQUE和NOT NULL约束?

to94eoyn  于 2023-10-16  发布在  Oracle
关注(0)|答案(1)|浏览(111)

我尝试在创建表的过程中为一列添加多个约束**,但我不确定如何在创建表的过程中正确添加NOT NULL和UNIQUE约束。

SQL> CREATE TABLE BOOK_STORES
  2  (Store_ID NUMBER(8)
  3  ,Name VARCHAR2(30)
  4  ,Contact VARCHAR2(30)
  5  ,Rep_ID VARCHAR(5)
  6  ,CONSTRAINT Store_id_PK PRIMARY KEY (Store_ID)
  7  ,CONSTRAINT Name_UN UNIQUE (Name), Name_NN NOT NULL (Name));

这就是我迄今为止所尝试的。我是Oracle和SQL的新手。我希望这两个约束都应用到“Name”列,这样它就不会接受空值或重复值。
但我收到了这个错误:

,CONSTRAINT Name_UN UNIQUE (Name), Name_NN NOT NULL (Name))
                                                  *
ERROR at line 7:
ORA-00907: missing right parenthesis
zwghvu4y

zwghvu4y1#

您可以对NOT NULL使用内嵌约束:

CREATE TABLE BOOK_STORES (
  Store_ID NUMBER(8)
, Name VARCHAR2(30) NOT NULL
, Contact VARCHAR2(30)
, Rep_ID VARCHAR(5)
, CONSTRAINT book_stores__Store_id__PK PRIMARY KEY (Store_ID)
, CONSTRAINT book_stores__Name__UN UNIQUE (Name)
);

或者,要命名约束:

CREATE TABLE BOOK_STORES (
  Store_ID NUMBER(8)
, Name VARCHAR2(30) CONSTRAINT book_stores__Name__NN NOT NULL
, Contact VARCHAR2(30)
, Rep_ID VARCHAR(5)
, CONSTRAINT book_stores__Store_id__PK PRIMARY KEY (Store_ID)
, CONSTRAINT book_stores__Name__UN UNIQUE (Name)
);

或者,使用CHECK约束(而不是NOT NULL约束)来检查它是否为空:

CREATE TABLE BOOK_STORES (
  Store_ID NUMBER(8)
, Name VARCHAR2(30)
, Contact VARCHAR2(30)
, Rep_ID VARCHAR(5)
, CONSTRAINT book_stores__Store_id__PK PRIMARY KEY (Store_ID)
, CONSTRAINT book_stores__Name__UN UNIQUE (Name)
, CONSTRAINT book_stores__Name__NN CHECK (name IS NOT NULL)
);

fiddle

相关问题