3819: ER_CHECK_CONSTRAINT_VIOLATED: Check constraint is violated(违反 CHECK 约束)
MySQL含义
插入或更新的行违反了表上定义的 CHECK 约束。在 MySQL 8.0.16 及更高版本中,CHECK 约束会真正强制执行(早期版本会忽略它们)。
原因
列值不满足 CHECK 表达式中的条件(例如存在 CHECK (price >= 0) 时输入负价格)。从旧版 MySQL 升级到 8.0.16+ 后,由于以前被忽略的约束现在开始强制执行,可能会意外出现。
解决方法
确保值满足约束条件;在应用端添加校验。查看约束定义:SHOW CREATE TABLE my_table; 如果约束确实不需要:ALTER TABLE my_table DROP CHECK constraint_name; 或临时使用 ALTER TABLE my_table ALTER CHECK constraint_name NOT ENFORCED; 同时修复错误数据的来源。
同一数据库的其他条目
- 1927MariaDB: ER_CONNECTION_KILLED: Connection was killed(连接已被终止)
- 1290ER_OPTION_PREVENTS_STATEMENT: running with the --read-only option(以 --read-only 选项运行)
- 1836ER_READ_ONLY_MODE: Running in read-only mode(以只读模式运行)
- 1118ER_TOO_BIG_ROWSIZE: Row size too large(行大小过大)
- 1170ER_BLOB_KEY_WITHOUT_LENGTH: BLOB/TEXT column used in key specification without a key length(在键定义中使用 BLOB/TEXT 列但未指定键长度)
- 1592ER_BINLOG_UNSAFE_STATEMENT: Unsafe statement written to the binary log(不安全的语句被写入二进制日志)
- 3140ER_INVALID_JSON_TEXT: Invalid JSON text(无效的 JSON 文本)