【发布时间】:2011-07-06 11:04:27
【问题描述】:
我创建了下表
create table publisher(name varchar(20), city varchar(20));
我想提出以下约束,“名称具有唯一性,城市仅取自“孟买”、“浦那”、“纳西克”、“潘吉”。我知道名称的唯一约束。我搜索了很多关于城市约束的信息,但直到现在我才明白。请你帮我谈谈约束。我使用了 'BETWEEN' 约束,但它失败了。我该怎么办?
【问题讨论】:
我创建了下表
create table publisher(name varchar(20), city varchar(20));
我想提出以下约束,“名称具有唯一性,城市仅取自“孟买”、“浦那”、“纳西克”、“潘吉”。我知道名称的唯一约束。我搜索了很多关于城市约束的信息,但直到现在我才明白。请你帮我谈谈约束。我使用了 'BETWEEN' 约束,但它失败了。我该怎么办?
【问题讨论】:
我认为您是在要求名称在他们的城市中是独一无二的,并且城市来自固定的可能性列表?
如果是这样,以下将起作用:
create table publisher(
name varchar(20),
city varchar(20),
constraint UQ_NamesWithinCities UNIQUE (name,city),
constraint CK_CityNames CHECK (city in ('mumbai', 'pune', 'nasik', 'panji'))
);
【讨论】:
您可以使用IN 代替BETWEEN
CREATE TABLE publisher
(
name VARCHAR( 20 ) UNIQUE
, city VARCHAR( 20 ) CHECK ( city IN ('a', 'b') )
);
INSERT INTO publisher
VALUES ('hi','a'); -- Succeeds
INSERT INTO publisher
VALUES ('hi','b'); -- Fails, already have 'hi'
INSERT INTO publisher
VALUES ('hj','c'); -- Fails, 'c' is not a city
【讨论】: