列的指定值

时间:2013-10-01 08:11:45

标签: sql postgresql ddl

如何使用预先指定的列值创建表。

类似于enum,但不是enum,因为它适用于8.3 Postgres,我需要使用8.1及更高版本的东西。

例如

CREATE TABLE (
    cars ('bmw', 'audi');
)

在将值插入汽车列时,我不能插入除bmw和audi之外的任何其他内容。

2 个答案:

答案 0 :(得分:2)

我认为你要找的是CHECK约束。

create table mydata(
cars char(4)CONSTRAINT limit_cars_to CHECK (cars in ('bmw', 'audi'))
);

insert into mydata values('bmw'); /*this insert works*/
insert into mydata values('xxx');/*this insert fails msg: ERROR: new row for relation "mydata" violates check constraint "limit_cars_to": insert into mydata values('xxx')
*/

我已经使用PostgreSQL 8.3进行了测试(因为这是SQL Fiddle的可用内容)。可能只是使用PostgreSQL 8.1。试一试。

来源:http://www.postgresql.org/docs/8.1/static/ddl-constraints.html

答案 1 :(得分:0)

有两种方法可以解决这个问题。

第一种是使用检查约束,Sashikanth的答案描述了它。 如果允许值不变,则应使用此方法。如果它们确实发生了变化,则需要更新约束,在许多组织中,这种约束可能需要很长的流程才能投入生产。

第二种是使用外键到另一个列出允许值的表:

create table cars (
    car varchar(10) primary key
);

create table mydata (
   id serial primary key,
   car varchar(10) references cars
);

如果您希望更改值,或者用户需要能够添加值,则应使用此方法。