如果 year
列不是 2014 或 2015,我希望插入语句失败
我需要从数据库端执行此操作作为临时措施,直到我可以访问应用程序代码
CREATE TABLE `movies` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(345) DEFAULT NULL,
`year` int(11) DEFAULT NULL,
`imdbid` varchar(45) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4545 DEFAULT CHARSET=utf8;
最佳答案
添加一个检查
约束
CREATE TABLE `movies` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(345) DEFAULT NULL,
`year` int(11) DEFAULT NULL,
`imdbid` varchar(45) DEFAULT NULL,
PRIMARY KEY (`id`),
CHECK `year` in (2014,2015)
) ENGINE=InnoDB AUTO_INCREMENT=4545 DEFAULT CHARSET=utf8;
或
ALTER TABLE `movies`
ADD constraint checkyear check (`year`in (2014,2015))
编辑
根据 jarlh 的更新,CHECK
约束不能很好地与 mysql 配合使用。
根据 MySQL Reference Manual
The CHECK clause is parsed but ignored by all storage engines
您可以创建一个Trigger
来模拟一个CHECK
约束。像这样。
CREATE TRIGGER trg BEFORE INSERT ON movies
FOR EACH ROW BEGIN
IF (New.year NOT IN(2014,2015))
THEN
signal sqlstate '45000'
set message_text = 'check failed';
END IF;
END;
您可以引用以下主题以获取更多信息
关于mysql - 如何在创建列上设置条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29515122/