无法向job_history表插入数据及删除CHECK约束的技术咨询
问题原因分析及解决办法
1. 无法插入数据的原因
你用的建表语句里,END_DATE是date类型,却加了CHECK (END_DATE LIKE '--/--/----')的约束——这完全不成立。MySQL中date类型的存储格式是YYYY-MM-DD,并非带斜杠的字符串格式,用字符串匹配的LIKE去校验日期类型的值,任何合法日期都会触发约束校验失败,自然插不进数据。
比如你尝试插入END_DATE = '2023-12-31',这个date类型的值和'--/--/----'的字符串格式完全不匹配,约束直接否决了插入操作。
2. 无法删除CHECK约束的原因
MySQL删除CHECK约束需要指定约束名称,但你创建这个约束时没给它命名,MySQL会自动生成一个随机的系统名称(比如job_history_chk_1),不知道名字就没法直接删除。
要删除的话,得先查询约束名:
SELECT CONSTRAINT_NAME FROM INFORMATION_SCHEMA.CHECK_CONSTRAINTS WHERE TABLE_NAME = 'job_history' AND TABLE_SCHEMA = '你的数据库名';
拿到约束名后,执行这条语句删除:
ALTER TABLE job_history DROP CHECK 约束名;
补充说明:如果你的MySQL版本低于8.0.16,MySQL其实是忽略CHECK约束的,但你能遇到插入失败的问题,说明用的是8.0.16及以上版本,这类版本才真正支持CHECK约束的校验逻辑。
内容的提问来源于stack exchange,提问作者Arturo Andrés Órdenes Barraza
相关产品推荐
相关产品推荐

