无法使用CHECK约束在SQL中创建表

时间:2014-02-26 13:15:11

标签: sql oracle oracle-sqldeveloper

我正在尝试在SQL开发人员中创建一个新表。我需要对Clinic_City有一个CHECK约束,但是它不起作用。有谁能够帮我?

CREATE TABLE TravelClinics (Clinic_Number number(3) PRIMARY KEY,
Clinic_Street varchar2(20) NOT NULL,
Clinic_City varchar2(10) NOT NULL,
Clinic_County varchar2(15) NOT NULL,
Clinic_Postcode varchar2(7) NOT NULL,
Clinic_Tel varchar2(11) NOT NULL,
Clinic_Fax varchar2(11) NOT NULL
CONSTRAINT
CHECK(Clinic_City IN ('LONDON', 'BIRMINGHAM', 'MANCHESTER', 'LEEDS', 'GLASGOW', 'EDINBURGH')))

4 个答案:

答案 0 :(得分:1)

在Oracle中,您需要将约束附加到正确的列,并为其命名,如下所示:

CREATE TABLE TravelClinics (
    Clinic_Number number(3) PRIMARY KEY
,   Clinic_Street varchar2(20) NOT NULL
,   Clinic_City varchar2(10) NOT NULL
        CONSTRAINT Valid_City
        CHECK(Clinic_City IN ('LONDON', 'BIRMINGHAM', 'MANCHESTER', 'LEEDS', 'GLASGOW', 'EDINBURGH'))
,   Clinic_County varchar2(15) NOT NULL
,   Clinic_Postcode varchar2(7) NOT NULL
,   Clinic_Tel varchar2(11) NOT NULL
,   Clinic_Fax varchar2(11) NOT NULL
)

Demo on sqlfiddle.

更好的方法是为城市创建一个单独的表,在其中插入六行,并从TravelClinics表中引用该表。这将减少需要复制的信息量。它还可以极大地简化添加新城市,因为它将是一个数据操作,而不是一个模式操作。

答案 1 :(得分:1)

试试这个。定义Clinic_Fax

后,您缺少逗号
CREATE TABLE TravelClinics (Clinic_Number number(3) PRIMARY KEY,
Clinic_Street varchar2(20) NOT NULL,
Clinic_City varchar2(10) NOT NULL,
Clinic_County varchar2(15) NOT NULL,
Clinic_Postcode varchar2(7) NOT NULL,
Clinic_Tel varchar2(11) NOT NULL,
Clinic_Fax varchar2(11) NOT NULL,
CONSTRAINT pk CHECK(Clinic_City IN ('LONDON', 'BIRMINGHAM', 'MANCHESTER', 'LEEDS', 'GLASGOW', 'EDINBURGH')))

SQL Fiddle Demo

答案 2 :(得分:0)

而是创建一个域表CITY和一个FK。 如果您想要添加城市,只需添加一行即可。 FK病是一种约束。

它还增加了规范化的优势。

答案 3 :(得分:0)

CREATE TABLE TravelClinics(Clinic_Number number(3)PRIMARY KEY, Clinic_Street varchar2(20)NOT NULL, Clinic_City varchar2(10)约束tc_clinic_city_nn NOT NULL CONSTRAINT tc_clinic_city_ck 检查(Clinic_City IN('LONDON','BIRMINGHAM','MANCHESTER','LEEDS','GLASGOW','EDINBURGH')), Clinic_County varchar2(15)NOT NULL, Clinic_Postcode varchar2(7)NOT NULL, Clinic_Tel varchar2(11)NOT NULL, Clinic_Fax varchar2(11)NOT NULL)