MySQL dwingt geen controlebeperkingen af.
Dit is een goed gedocumenteerde afwijking van de SQL-standaard. (Hoewel het onverwacht is voor niet-ingewijden.)
Als u de MySQL-database nodig hebt om een "controlebeperking" af te dwingen, moet de handhaving worden gecodeerd in een BEFORE INSERT
en een BEFORE UPDATE
trigger.
Deze opmerking:
is begraven in de MySQL Reference Manual, onder de CREATE TABLE
syntaxis.
Referentie:https://dev.mysql.com/doc /refman/5.5/en/create-table.html
WAARSCHUWING VOOR ENUM
Een ENUM
beperkt het invoegen van "ongeldige" waarden niet; een ongeldige waarde wordt vertaald in een tekenreeks met een lengte van nul, er wordt een waarschuwing gegeven, maar het is geen fout.
Demonstratie:
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