首页 > 解决方案 > 在列上创建具有多个检查约束的表

问题描述

我试图在“网络”列上创建一个新的“机器”表;它不能为空,并且必须是三个不同字符串中的任何一个。我是 SQL 及其语法的新手,并且正在使用 mysql 5.7

DROP TABLE IF EXISTS `machines`;

CREATE TABLE `machines` (
    `id` int(11) NOT NULL,
    `hostname` varchar(255),
    `ip_address` varchar(15),
    `network` varchar(255) NOT NULL,
    CONSTRAINT CHK_network CHECK (network = 'INTERNAL' OR 'EXTERNAL' OR 'OTHER'),
    PRIMARY KEY (`id`)
    );

INSERT INTO `machines`

VALUES
    (1, 'host1', '123.123.123.1', 'EXTERNAL'),
    (2, 'host2', '192.168.0.1', 'EXTERNAL' ),
    (3, 'host3', '192.168.0.2', '       ' );

我希望空格不会进入第三行,但确实如此。

标签: mysqlcheck-constraints

解决方案


像这样定义你的约束:

CONSTRAINT CHK_network CHECK (network IN ('INTERNAL', 'EXTERNAL', 'OTHER'))

推荐阅读