Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Check Constraint funktioniert nicht mysql

MySQL erzwingt keine Check Constraints.

Dies ist eine gut dokumentierte Abweichung vom SQL-Standard. (Obwohl es von Uneingeweihten unerwartet ist.)

Wenn Sie die MySQL-Datenbank benötigen, um eine "Prüfbedingung" zu erzwingen, muss die Erzwingung in einen BEFORE INSERT codiert werden und ein BEFORE UPDATE auslösen.

Dieser Hinweis:

befindet sich im MySQL-Referenzhandbuch unter CREATE TABLE Syntax.

Referenz:https://dev.mysql.com/doc /refman/5.5/en/create-table.html

WARNUNG VOR ENUM

Ein ENUM schränkt das Einfügen "ungültiger" Werte nicht ein; ein ungültiger Wert wird in einen String der Länge Null übersetzt, es wird eine Warnung ausgegeben, aber es handelt sich nicht um einen Fehler.

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