2017-12-29 27 views
0

私は私のテーブルのいずれかへのデータの挿入に基づいて、テーブル内の自動インクリメントを設定しようとしてきた、このBefor自動インクリメントMySQLのトリガー

を使用して値が、私は、重複としてフラグが付けられます「は既にVEの他の質問を見て、私は私の主な問題は、特にライントリガに関する構文の誤解だと思う:

WHERE ID = NEW.ID; 

MySQLのブロック:

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: は出版テーブルへの挿入時には、私はidフィールドがpublicationsテーブルではありませんので、任意のNEW.IDがすることはできませんメンバーテーブルのNo_Publication列は1

+0

どのような質問ですか? –

+0

@ digital.aaronどうすれば実際に動作するトリガーを作成できますか? –

+0

あなたの実際の質問、サンプルデータ、予想される結果、および実際の結果で投稿を更新する必要があります。 –

答えて

0

ずつ増加します。 mysqlで未知のフィールドエラーを受け取っているはずです。 publicationsためのcreate table文はにどのようなフィールドの更新に使用するように手がかりが含まれていますから、begin ... endの必要がない、また

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

FOREIGN KEY(Researcher_ID) REFERENCES Members(ID) 

したがって、更新は次のようになります。トリガー本体は単一のSQL文で構成されています。

CREATE TRIGGER New_Publication AFTER INSERT ON Publications 
    FOR EACH ROW 
    UPDATE Members SET No_Publications = No_Publications + 1 WHERE ID = NEW.Researcher_ID; 
関連する問題