MySQL non applica vincoli di controllo.
Questa è una deviazione ben documentata dallo standard SQL. (Anche se inaspettato per chi non lo sapesse.)
Se hai bisogno del database MySQL per imporre un "vincolo di controllo", l'imposizione deve essere codificata in un BEFORE INSERT
e un BEFORE UPDATE
trigger.
Questa nota:
è sepolto nel MySQL Reference Manual, sotto il CREATE TABLE
sintassi.
Riferimento:https://dev.mysql.com/doc /refman/5.5/en/create-table.html
AVVISO SU ENUM
Un ENUM
non impedisce l'inserimento di valori "non validi"; un valore non valido viene convertito in una stringa di lunghezza zero, viene emesso un avviso, ma non è un errore.
Dimostrazione:
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