如何在创建列上添加条件

时间:2015-04-08 12:49:53

标签: mysql sql

如果列year不是2014或2015

,我希望插入语句失败

我需要从数据库端执行此操作作为临时mesearure,直到我可以访问应用程序代码

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;

1 个答案:

答案 0 :(得分:3)

添加check约束

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一起使用。 根据{{​​3}}

  

CHECK子句被解析但被所有存储引擎忽略

您可以创建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 Reference Manual

CHECK constraint in MySQL is not working