sql >> Database >  >> RDS >> Mysql

check constraint werkt niet mysql

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


  1. Hoe de waitevent Geschiedenis van de Oracle-sessie te vinden

  2. libpqxx v12 - vectorwaarden dynamisch binden aan voorbereide instructie (alternatief voor aanroep)

  3. Waarom hebben we berichtenmakelaars zoals RabbitMQ nodig boven een database zoals PostgreSQL?

  4. Innodb:kan de FULLTEXT-index niet vinden die overeenkomt met de kolomlijst bij het opvragen van meer dan 1 kolommen