MySQL执行NOCHECK CONSTRAINT报SQL语法错误,如何临时禁用CHECK约束插入数据
语法错误原因
你使用的NOCHECK CONSTRAINT是SQL Server、Oracle等数据库的专有语法,MySQL并未实现该语法规则,因此触发1064语法错误。MySQL对CHECK约束的启用/禁用控制是通过调整约束的ENFORCED属性实现的,无需修改约束本身的校验规则。
实现步骤
按照以下顺序执行语句即可满足需求,全程不需要修改原有约束规则,也不需要调整插入语句的字段和值:
- 临时禁用CK_Years约束校验
ALTER TABLE Students ALTER CHECK CK_Years NOT ENFORCED;
- 执行你原有的插入语句
INSERT INTO Students (Name, Age, Class, Years) VALUES ("Eric","25","110","2");
- 插入完成后立即恢复约束校验
ALTER TABLE Students ALTER CHECK CK_Years ENFORCED;
注意事项
ALTER TABLE属于DDL语句,执行后会自动提交未提交的事务,约束状态修改后会立即对所有会话生效,建议操作前确认没有其他并发写入操作修改Years字段,避免不符合约束的数据被意外写入。- 上述语法仅支持MySQL 8.0.16及以上版本,该版本才正式实现了CHECK约束的完整控制能力,你的查询结果中存在
ENFORCED字段,说明你的MySQL版本符合要求。
内容的提问来源于stack exchange,提问作者NoobCoder
相关产品推荐
相关产品推荐

