mysql Trigger On insert - PullRequest
       2

mysql Trigger On insert

2 голосов
/ 11 августа 2011

что не так с моим синтаксисом?

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

Ответы [ 2 ]

4 голосов
/ 11 августа 2011

Синтаксис должен быть следующим:

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*/

Примечание по схеме именования для триггеров
Я бы рекомендовал назвать ваш триггер ai (что означает after insert), чтобы вы знали, когда он запускает какую таблицу, а не бессмысленное имя, например: db_dhruniversity.trigger1.
Я всегда использую [a / b] + [d / i / u] _tablename_each в качестве имени триггера, таким образом я всегда знаю, когда срабатывает триггер (до / после) для какого события (вставить / удалить / обновить) и по какой таблице.

Также рекомендуется задокументировать, что триггер срабатывает в строке each, следовательно, each в конце имени триггера.

Обратите внимание, что MySQL не поддерживает триггеры, которые срабатывают один раз за оператор пока (но это может измениться в будущем).

2 голосов
/ 11 августа 2011

В нем нет разделителей:

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...