在列上创建具有多个检查约束的 table

Creating table with multiple check constraints on a column

我正在尝试创建一个新的 'machines' table 并在 'network' 列上设置约束;它不能为 null,并且必须是三个不同字符串中的任何一个。我是 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', '       ' );

我希望空格不会被输入到第三行,但它确实是。

像这样定义约束:

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

您可以将第 network 列更改为 ENUM

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

所以插入给你一个

Data truncated for column 'network' at row 3

查看手册Here