O MySQL não impõe restrições de verificação.
Este é um desvio bem documentado do padrão SQL. (Embora seja inesperado pelos não iniciados.)
Se você precisar que o banco de dados MySQL imponha uma "restrição de verificação", a imposição deve ser codificada em um
BEFORE INSERT
e um BEFORE UPDATE
acionar. Esta nota:
está enterrado no MySQL Reference Manual, sob o
CREATE TABLE
sintaxe. Referência:https://dev.mysql.com/doc /refman/5.5/en/create-table.html
AVISO SOBRE ENUM
Um
ENUM
não restringe a inserção de valores "inválidos"; um valor inválido é convertido em uma string de comprimento zero, um aviso é emitido, mas não é um erro. Demonstração:
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