首页 > 解决方案 > MYSQL - 如何使用约束限制某些值?

问题描述

CREATE TABLE Movie(
name VARCHAR(30),
year int,
CHECK ((name='one' AND year>1990) OR (name='two' AND year<1990))
);

我是 MySQL 的初学者,我的目标是限制 name='one' 和 name='two' 以便他们的年份不能在 1990 年之后或之前插入值。约束在 'one' 和 'two' 上运行良好,但是当我尝试添加 name='three' 时,它会抛出一个错误,我不知道为什么,因为 name='three' 不在约束中并且不应局限于任何年份。

mysql> INSERT INTO Movie values ('three', 1999);
ERROR 3819 (HY000): Check constraint 'movie_chk_1' is violated.

如果您有任何提示,请告诉我,因为我对数据库没有太多经验。

标签: mysql

解决方案


我怀疑您希望允许除此之外的任何名称one,并且two没有其他限制。如果是这样,那么您需要为此添加一个条件到您的检查约束中。

CREATE TABLE Movie (
    name VARCHAR(30),
    year INT,
    CHECK (name = 'one' AND year > 1990 OR name = 'two' AND year < 1990 OR
          name NOT IN ('one', 'two'));

所以这里的逻辑是允许:

  • 姓名 = 大于 1990 年
  • 姓名 = 两年且小于 1990 年
  • 或除一和二以外的任何名称,适用于任何年份

推荐阅读