Zuerst habe ich eine Tabelle wie erstellt
CREATE TABLE Customer (
SD integer CHECK (SD > 0),
Last_Name varchar (30),
First_Name varchar(30)
);
und dann Werte in diese Tabelle eingefügt
INSERT INTO Customer values ('-2','abc','zz');
MySQL zeigt keinen Fehler an, es hat die Werte akzeptiert.
mysql
check-constraints
John Raja
quelle
quelle
Antworten:
MySQL 8.0.16 ist die erste Version, die CHECK-Einschränkungen unterstützt.
Lesen Sie https://dev.mysql.com/doc/refman/8.0/en/create-table-check-constraints.html
Wenn Sie MySQL 8.0.15 oder früher verwenden, heißt es im MySQL-Referenzhandbuch :
Versuchen Sie einen Auslöser ...
Hoffentlich hilft das.
quelle
CHECK
definierte Einschränkung stößt . Ahhh, das wäre zu einfach ...Leider unterstützt MySQL keine SQL-Überprüfungsbeschränkungen. Sie können sie aus Kompatibilitätsgründen in Ihrer DDL-Abfrage definieren, sie werden jedoch einfach ignoriert.
Es gibt eine einfache Alternative
Sie können erstellen
BEFORE INSERT
undBEFORE UPDATE
auslösen, die entweder einen Fehler verursachen oder das Feld auf den Standardwert setzen, wenn die Anforderungen der Daten nicht erfüllt sind.Beispiel für die
BEFORE INSERT
Arbeit nach MySQL 5.5Vor MySQL 5.5 mussten Sie einen Fehler verursachen, z. B. eine undefinierte Prozedur aufrufen.
In beiden Fällen führt dies zu einem impliziten Transaktions-Rollback. MySQL erlaubt die ROLLBACK-Anweisung selbst nicht innerhalb von Prozeduren und Triggern.
Wenn Sie die Transaktion nicht zurücksetzen möchten (INSERT / UPDATE sollte auch bei einer fehlgeschlagenen "Prüfbedingung" erfolgreich sein, können Sie den Wert überschreiben, mit
SET NEW.ID = NULL
dem die ID auf den Standardwert des Felds gesetzt wird. Dies ist für eine ID nicht wirklich sinnvoll thoBearbeiten: Das streunende Zitat wurde entfernt.
In Bezug auf den
:=
Betreiber:https://dev.mysql.com/doc/refman/5.6/en/assignment-operators.html
In Bezug auf Backtick-ID-Anführungszeichen:
http://dev.mysql.com/doc/refman/5.6/en/identifiers.html
quelle
DELIMITER
?CHECK
Einschränkungen werden von MySQL ignoriert, wie in einem winzigen Kommentar in den Dokumenten erläutert:CREATE TABLE
quelle
CHECK
Einschränkungen, wenn dieCHECK
Auswertung bisFALSE
dahin das Einfügen (oder Aktualisieren) nicht erfolgt und ein Fehler verursacht wird.Die
CHECK
Einschränkung scheint in MySQL nicht implementiert zu sein.Siehe diesen Fehlerbericht: https://bugs.mysql.com/bug.php?id=3464
quelle
Wie von joanq erwähnt, scheint MariaDB nun unter anderem CHECK-Einschränkungen zu unterstützen:
"Unterstützung für CHECK CONSTRAINT ( MDEV-7563 )."
https://mariadb.com/kb/en/mariadb/mariadb-1021-release-notes/
quelle
Check-Einschränkungen werden ab Version 8.0.15 unterstützt (müssen noch veröffentlicht werden).
https://bugs.mysql.com/bug.php?id=3464
quelle
Aktualisieren Sie auf MySQL 8.0.16, um Folgendes zu verwenden
checks
:MySQL prüft die Dokumentation
quelle
versuchen Sie es mit
set sql_mode = 'STRICT_TRANS_TABLES'
ODERSET sql_mode='STRICT_ALL_TABLES'
quelle
CHECK
Einschränkung nicht erfüllen