MySQLはチェック制約を強制しません。
これは、SQL標準からの十分に文書化された逸脱です。 (初心者には予想外でしたが。)
「チェック制約」を適用するためにMySQLデータベースが必要な場合は、適用をBEFORE INSERT
にコーディングする必要があります。 およびBEFORE UPDATE
トリガー。
このメモ:
MySQLリファレンスマニュアルのCREATE TABLE
の下に埋め込まれています 構文。
参照: https://dev.mysql.com/doc /refman/5.5/en/create-table.html
ENUMに関する警告
ENUM
「無効な」値の挿入を制限しません。無効な値は長さゼロの文字列に変換され、警告が発行されますが、エラーではありません。
デモンストレーション:
CREATE TABLE foo (gen ENUM('M','F'))
INSERT INTO foo (gen) VALUES ('x')
-- Warning Code : 1265
-- Data truncated for column 'gen' at row 1
SELECT gen, CHAR_LENGTH(gen) FROM foo;
-- gen CHAR_LENGTH(gen)
-- --- ----------------
-- 0