sql >> Databasteknik >  >> RDS >> Mysql

check constraint fungerar inte mysql

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


  1. protokollpaket ur funktion

  2. Ruby och MySQL UTF-8-tecken

  3. N+1-redundans och serverkonsolidering

  4. Begränsa PHP-exekvering?