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 テキスト)