创建表,其属性必须在 1-10 范围内(Postgres)

问题描述 投票:0回答:4

如何限制表中的属性仅允许值在 1-10 之间? 这是到目前为止的声明..不知道如何使 OfficeNumber 只接受该区间内的值

CREATE TABLE OfficeStaff(
    EID INT PRIMARY KEY,
    OfficeNumber INT NOT NULL
); 
sql postgresql
4个回答
19
投票

使用

check
约束:

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

但请注意,还有另一种也许更好的方法。 您应该有一个包含有效办公室号码的

OfficeNumbers
表。 然后,您可以使用外键关系来强制编号,而无需对数字进行硬编码。


2
投票

您可以使用域名来实现此目的:

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


0
投票

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

CHECK (OfficeNumber BETWEEN 1 AND 10)

0
投票

我添加了类似于以下的检查:

CHECK (OfficeNumber BETWEEN 1 AND 10)

当我导出架构时,PostgresSQL(我使用的是 v.12.20)将我的检查转换为:

CONSTRAINT OfficeStaff_OfficeNumber_check CHECK (((OfficeNumber >= 1) AND (OfficeNumber <= 10)))
© www.soinside.com 2019 - 2024. All rights reserved.