mysql - 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.
如果您有任何提示,请告诉我,因为我对数据库没有太多经验。
解决方案
我怀疑您希望允许除此之外的任何名称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 年
- 或除一和二以外的任何名称,适用于任何年份
推荐阅读
- nunit-3.0 - 使用 DotNetCoreTest 运行 Nunit 3 的蛋糕失败
- promise - 关于Promise,这个问题让我很困惑
- nginx - 错误 Nginx 服务器(/etc/nginx/sites-enabled/demo.xx.id:99 中的“位置”指令不允许)
- linux - 在 VMware 中安装嵌入式 RTOS
- python - Sklearn fbeta_score默认平均参数不适用于多类目标变量
- docker - Bitnami Jenkins:在尝试连接到 Docker 守护进程套接字时获得权限被拒绝
- node.js - firebase 基础中的云功能不起作用,snapshot.val() 不是功能?
- apache - htaccess规则重写url后,为什么我无法访问我的页面和查询参数?
- configuration - 用证书连接 Kurento
- javascript - 如何使用 formik 和 yup 验证对数组字段进行验证