2011-08-11 18 views
2

私の構文に何が間違っていますか?mysqlのトリガー挿入時

CREATE 
    TRIGGER db_dhruniversity.trigger1 
    AFTER INSERT 
    ON jos_dhruprofile 
    FOR EACH ROW 
BEGIN 
UPDATE jos_users 
    SET jos_users.department = jos_dhruprofile.department 
    WHERE jos_users.id = jos_dhruprofile.uid 
END 
+1

コンパイルエラーメッセージを表示できますか? – heximal

答えて

2

何の区切り文字はそれではありません。

DELIMITER || 

CREATE 
    TRIGGER db_dhruniversity.trigger1 
    AFTER INSERT 
    ON jos_dhruprofile 
    FOR EACH ROW 
BEGIN 
UPDATE jos_users 
    SET jos_users.department = NEW.department 
    WHERE jos_users.id = NEW.uid; 
END || 

DELIMITER; 
+0

私のロジックは動作していないと思います。 – Tony77

+0

おそらく達成したいことを教えてください。 – Mchl

+0

私は、1、2つのテーブルと呼ばれている 他USERPROFILE が呼び出され、ユーザー 私は更新したい毎回新しいレコードがUSERPROFILEに挿入されたテーブルに「ユーザ」 このモックアップ構造 テーブル ID -userprfile UID 名前 部門 テーブル、ユーザー ID 名 メール 部門(userprofiletableからすべての挿入時にこのフィールドを更新したい) 今のように、テーブルuserprofileはuid = idのユーザーと一致します。contratinsや外部キーはありません。おそらく、わかりません,,, どうすればいいですか?事前に感謝..... – Tony77

4

次のような構文は次のようになります。

DELIMITER $$ /* if you're not using an editor, you must change the delimiter*/ 

CREATE 
    TRIGGER ai_jos_dhruprofile_each 
    AFTER INSERT 
    ON jos_dhruprofile 
    FOR EACH ROW 
BEGIN 
    UPDATE jos_users 
    SET jos_users.department = NEW.department 
    WHERE jos_users.id = NEW.uid; /*<<<--- ; after every stament */ 
END $$ /* changed delimiter after the end */ 

DELIMITER ; /*make sure you set the delimiter back to the default*/ 

注意を私はお勧めのトリガー
の命名スキームにトリガーの名前をaiafter insertという意味)とすると、いつ発火するかを知ることができますテーブルの意味は、db_dhruniversity.trigger1のように意味がありません。
私はいつもを使用し、[A/B] + triggernameとして[D/I/U] _tablename_each、トリガ火災(前/後)(挿入/削除イベントため /私はいつも知っている方法更新)とそのテーブル。

トリガーがeach行に発生することを記録することをお勧めします。したがって、トリガー名の末尾にeachがあります。

MySQLは文ごとに1回起動するトリガーをサポートしていません。まだです(ただし、今後変更される可能性があります)。