MySQL upprätthåller inte kontrollbegränsningar.
Detta är en väl dokumenterad avvikelse från SQL-standarden. (Även om det var oväntat av den oinvigde.)
Om du behöver MySQL-databasen för att upprätthålla en "kontrollrestriktion", måste tillämpningen kodas till en BEFORE INSERT
och en BEFORE UPDATE
utlösare.
Denna anteckning:
är begravd i MySQL Reference Manual, under CREATE TABLE
syntax.
Referens:https://dev.mysql.com/doc /refman/5.5/en/create-table.html
VARNING OM ENUM
En ENUM
begränsar inte "ogiltiga" värden från att infogas; ett ogiltigt värde översätts till en nolllängdssträng, en varning utfärdas, men det är inte ett fel.
Demonstration:
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