2017-12-29 4 views
0

Ich habe versucht, ein Auto-Inkrement in einer Tabelle auf das Einfügen von Daten in einen meiner Tabellen basierend einzurichten,Auto Increment ein Wert einen MySQL-Trigger

Befor dies wird als Duplikat gekennzeichnet, I hat gesucht bereits in anderen Fragen, und ich glaube, mein Hauptproblem Mißverständnis der Syntax in Bezug auf einen Trigger ist, speziell die Zeile:

WHERE ID = NEW.ID; 

MySQL Block:

CREATE TABLE Members(
    ID INT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE, 
    FIRST_NAME TEXT(16), 
    LAST_NAME TEXT(16), 
    TITLE TEXT(7), /** 7 CHARS for 'Student'*/ 
    INSTITUTION VARCHAR(2048), 
    No_Publications INT NOT NULL, 
    PRIMARY KEY(ID) 
); 
CREATE TABLE Papers(
    ISBN INT UNSIGNED NOT NULL UNIQUE, 
    Title TEXT(4), 
    Publish_Date DATE NOT NULL, 
    Topic TEXT(128), 
    PRIMARY KEY(ISBN) 
); 
    CREATE TABLE Publications(
    Researcher_ID INT UNSIGNED NOT NULL UNIQUE, 
    ISBN INT UNSIGNED NOT NULL UNIQUE, 
    PRIMARY KEY (Researcher_ID, ISBN), 
    FOREIGN KEY(Researcher_ID) REFERENCES Members(ID) ON DELETE RESTRICT ON UPDATE CASCADE, 
    FOREIGN KEY(ISBN) REFERENCES Papers(ISBN) ON DELETE RESTRICT ON UPDATE CASCADE /**Used in 
    many to many relations*/ 
); 

    CREATE TRIGGER New_Publication AFTER INSERT ON Publications 
    FOR EACH ROW 
    BEGIN 
    UPDATE Members SET No_Publications = No_Publications + 1 WHERE ID = NEW.ID; 
    END; 

EDIT: Beim Einsetzen in die Veröffentlichungen Tabelle, mag ich die No_Publication Spalte in der Tabelle Mitglieder durch eine

+0

Was ist Ihre Frage? –

+0

@ digital.aaron wie kann ich einen Auslöser formulieren, der tatsächlich funktioniert, weil dieser nicht aus irgendeinem Grund ist –

+0

Dann sollten Sie Ihren Beitrag mit Ihrer tatsächlichen Frage, Beispieldaten, erwarteten Ergebnissen und tatsächlichen Ergebnissen aktualisieren. –

Antwort

0

zu erhöhen Es gibt kein id Feld in der publications Tabelle, so kann es keine NEW.ID sein. Sie müssen einen unbekannten Feldfehler in mysql erhalten haben. Die Anweisung create table für publications enthält den Hinweis darauf, was Feld in dem Update zu verwenden:

FOREIGN KEY(Researcher_ID) REFERENCES Members(ID) 

daher das Update sollte wie folgt aussehen:

UPDATE Members SET No_Publications = No_Publications + 1 WHERE ID = NEW.Researcher_ID 

Auch gibt es keine Notwendigkeit für begin ... end, da Der Trigger-Körper besteht aus einer einzigen SQL-Anweisung:

CREATE TRIGGER New_Publication AFTER INSERT ON Publications 
    FOR EACH ROW 
    UPDATE Members SET No_Publications = No_Publications + 1 WHERE ID = NEW.Researcher_ID; 
Verwandte Themen