2016-08-06 69 views
0

Ich werde mysql Einschränkungen verwenden, um das Einfügen von Zahlen unter Null zu verhindern. Ich habe diese Abfrage von W3schools gefunden.Mysql Check Constraint funktioniert nicht

CREATE TABLE Persons 
(
P_Id int NOT NULL, 
LastName varchar(255) NOT NULL, 
FirstName varchar(255), 
Address varchar(255), 
City varchar(255), 
CHECK (P_Id>0) 
) 

Aber wenn ich 0 einfügen Es erlaubt mir, dies zu tun. Irgendeine Idee?

+0

[** So überprüfen Einschränkung durch Trigger in mysql erreicht **] (http://stackoverflow.com/questions/37904425/constant -column-value-in-mysql-tabelle/37904564 # 37904564) – 1000111

Antwort

1

Momentan unterstützt MySQL check nicht, was bedeutet, dass es Ihre Definition analysiert, aber den check Teil ignoriert.

Die CHECK-Klausel wird analysiert, aber von allen Speicher-Engines ignoriert.

The docs

Um das gleiche zu erreichen Sie einen Trigger definieren können und brechen Sie die Aktualisierung/einfügen, wenn nötig mit einem SIGNAL

SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Invalid P_Id'; 

Aber Ihre eigentliche Problem hier ist, dass Sie dies nicht tun Definieren Sie P_Id als Auto-Inkrement PRIMÄRSCHLÜSSEL. Dann macht die DB alles für dich.

Dann bieten Sie überhaupt keine P_Id an. Der DB nummeriert diese Spalte beginnend mit 1.

Und Sie sollten eigentlich nicht W3Schools verwenden. Ihre Totorials sind schlecht.

1

Bei anderen Speicher-Engines, MySQL Server analysiert und ignoriert die FREMD KEY und REFERENCES Syntax in CREATE TABLE-Anweisungen. Die CHECK-Klausel wird analysiert, aber von allen Speicher-Engines ignoriert. Siehe Abschnitt 1.8.2.3, "Fremdschlüsselunterschiede".

können Sie diese Antwort verweisen CHECK constraint in MySQL is not working

0

Option 2, Verwendung generierten Spalte in Kombination mit einer Anweisung CASE und nicht NULL-Constraint. Zum Beispiel:

CREATE TABLE Persons 
(
P_Id int NOT NULL, 
LastName varchar(255) NOT NULL, 
FirstName varchar(255), 
Address varchar(255), 
City varchar(255), 
CHECK_GEN_FIELD int AS (CASE WHEN P_Id>0 THEN 1 ELSE NULL END) NOT NULL 
); 

Abfrage OK, 0 betroffenen Zeilen (0,04 sec)

mysql> Einfügen in Personen (P_ID, Nachname) Werte (10, 'Test');

Abfrage OK, 1 Zeile betroffen (0,00 sec)

mysql> Einfügen in Personen (P_ID, Nachname) Werte (0, 'test');

ERROR 1048 (23000): Spalte 'CHECK_GEN_FIELD' kann nicht null sein