Mysql
 sql >> Database >  >> RDS >> Mysql

il vincolo di controllo non funzionerà mysql

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