创建表时如何为字段同时添加UNIQUE与NOT NULL约束?
Oracle中为字段同时添加NOT NULL和UNIQUE约束的正确方法
你的SQL语句报错是因为Name_NN NOT NULL (Name)的语法错误:NOT NULL作为表级约束时,不能直接用NOT NULL (列名)的格式,且缺少CONSTRAINT关键字。以下是两种正确的实现方式:
方式一:字段级约束(简洁写法)
直接在字段定义后同时指定两个约束,Oracle会自动为UNIQUE约束生成默认名称:
CREATE TABLE BOOK_STORES (Store_ID NUMBER(8) ,Name VARCHAR2(30) NOT NULL UNIQUE ,Contact VARCHAR2(30) ,Rep_ID VARCHAR(5) ,CONSTRAINT Store_id_PK PRIMARY KEY (Store_ID));
方式二:表级约束(显式命名约束)
如果需要为所有约束指定自定义名称,NOT NULL可以通过CHECK (列名 IS NOT NULL)的形式实现(Oracle中NOT NULL本质是特殊的CHECK约束):
CREATE TABLE BOOK_STORES (Store_ID NUMBER(8) ,Name VARCHAR2(30) ,Contact VARCHAR2(30) ,Rep_ID VARCHAR(5) ,CONSTRAINT Store_id_PK PRIMARY KEY (Store_ID) ,CONSTRAINT Name_UN UNIQUE (Name) ,CONSTRAINT Name_NN CHECK (Name IS NOT NULL));
这两种写法都能实现Name字段非空且唯一的要求,避免你遇到的ORA-00907语法错误。
内容的提问来源于stack exchange,提问作者JoshLeonthe1st
相关产品推荐
相关产品推荐

