创建具有属性的表,该属性必须在1-10范围内(Postgres)

时间:2015-06-01 11:18:48

标签: sql postgresql

如何约束表中的属性以仅允许值介于1-10之间? 这是到目前为止的声明..不知道如何使OfficeNumber只接受该间隔中的值

CREATE TABLE OfficeStaff(
    EID INT PRIMARY KEY,
    OfficeNumber INT NOT NULL
); 

3 个答案:

答案 0 :(得分:3)

使用check约束:

CREATE TABLE OfficeStaff (
    EID INT PRIMARY KEY,
    OfficeNumber INT NOT NULL,
    CHECK (OfficeNumber BETWEEN 1 AND 10)
); 

但请注意,还有另一种可能更好的方法。您应该有一个OfficeNumbers表,其中包含有效的办公室号码。然后,您可以使用外键关系来强制执行编号,而无需对数字进行硬编码。

答案 1 :(得分:1)

您可以将域用于此目的:

create domain mydomain as integer check(value between 1 and 10)

create table mytable(id serial primary key, md mydomain not null)

- 这两个会成功

insert into mytable(md) values(1)
insert into mytable(md) values(2)

- 那个会失败

insert into mytable(md) values(12)

错误:域mydomain的值违反了检查约束“mydomain_check”

**********错误**********

错误:域mydomain的值违反了检查约束“mydomain_check”

可在此处找到更多信息:http://www.postgresql.org/docs/9.1/static/sql-createdomain.html

答案 2 :(得分:0)

您可以为定义添加constraints。在这种情况下,您可以添加

CHECK (OfficeNumber BETWEEN 1 AND 10)