我正在尝试创建一个在“网络”列上有约束的新“机器”表;它不能为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', ' ' );
我希望不会在第三行中输入空格,但确实如此。
答案 0 :(得分:0)
这样定义约束:
CONSTRAINT CHK_network CHECK (network IN ('INTERNAL', 'EXTERNAL', 'OTHER'))
答案 1 :(得分:0)
您可以将列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`)
);
因此请插入
第3行“网络”列的数据被截断
查看手册Here