在列上创建具有多个检查约束的 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
我正在尝试创建一个新的 '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