MySQL no impone restricciones de verificación.
Esta es una desviación bien documentada del estándar SQL. (Aunque inesperado para los no iniciados).
Si necesita que la base de datos MySQL aplique una "restricción de verificación", la aplicación debe codificarse en un BEFORE INSERT
y un BEFORE UPDATE
disparador.
Esta nota:
está enterrado en el Manual de referencia de MySQL, bajo CREATE TABLE
sintaxis.
Referencia:https://dev.mysql.com/doc /refman/5.5/en/create-table.html
ADVERTENCIA SOBRE ENUM
Un ENUM
no restringe la inserción de valores "no válidos"; un valor no válido se traduce en una cadena de longitud cero, se emite una advertencia, pero no es un error.
Demostración:
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