2016-08-20 2 views
2

Hier möchte ich 2 CHECK-Einschränkung erstellen, bevor der Datensatz in die Datenbank einfügen.MySql-Workbench CHECK-Einschränkung

ALTER TABLE SubjectEnrollment 
ADD CONSTRAINT register CHECK (register <= classSize AND register >=0), 
ADD CONSTRAINT available CHECK (available <= classSize AND available >= 0); 
  1. Register Attribut sollte nicht mehr als classSize Attribut und kleiner als 0
  2. verfügbar Attribut sollte nicht mehr als classSize attribte und weniger als 0.

Wenn ich in dieser Syntax eingeben in MySql Workbench, es Beschwerden "Syntax Fehler: unerwartete 'CHECK' (überprüfen) '. Wie sollte ich diese hinzufügen, mit TRIGGER?

Vielen Dank.

+2

Warum stören? MySQL erzwingt keine Prüfbedingungen. –

+0

Wenn Sie Prüfungen benötigen, dann verwenden Sie Trigger in MySQL –

+0

Bevor das Update an der Tabelle vorgenommen wird, sollte es die verfügbare Klassengröße überprüfen, bevor der Schüler den Betreff registrieren kann. Wenn die Klasse nur für 40 Schüler verfügbar ist, darf der 41. Schüler nicht mehr in die Tabelle einfügen. – helloworld1234

Antwort

2

Da MySQL check nicht unterstützt, benötigen Sie einen Trigger dafür. So etwas wie diese Trigger CREATE:

delimiter $$ 
CREATE TRIGGER some_trigger_name 
BEFORE INSERT ON SubjectEnrollment 
FOR EACH ROW 
BEGIN  
    IF (NEW.register > NEW.classSize OR NEW.register < 0)   
     SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'invalid data'; 
    END IF; 
END 
$$ 

Sie müssen die gleichen Auslöser für UPDATE s definieren.

+0

Danke, darf ich fragen, das 'NEW' Wort ist Tabellenname? – helloworld1234

+0

'NEW' verweist auf den Datensatz, der in die Tabelle eingefügt werden soll. 'NEW.register' ist der Wert von' register', den Sie einfügen möchten. BTW, wenn Sie einen 'UPDATE' Trigger definieren, dann verwenden Sie auch das Wort' NEW' zum Referenzieren des Datensatzes, den Sie aktualisieren möchten –

+0

Vielen Dank, Mann ... – helloworld1234

0

Ein bisschen lang für einen Kommentar.

MySQL unterstützt die Syntax für check, aber in der create table:

create table (
    . . . 
    CHECK (register <= classSize AND register >= 0) 
); 

Check ist eigentlich nicht in irgendwelchen Motoren umgesetzt, so dass dies keine Auswirkungen. Vermutlich aus diesem Grund ist es nicht Teil der constraint Syntax und daher nicht verfügbar für add constraint.

Verwandte Themen