mysql触发器插入

时间:2011-08-11 14:45:52

标签: php mysql triggers

我的语法有什么问题?

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 个答案:

答案 0 :(得分: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*/

关于触发器命名方案的说明
我建议命名您的触发器ai(意为after insert),以便您知道何时触发哪个表格,而不是像db_dhruniversity.trigger1这样无意义的名称。
我总是使用 [a / b] + [d / i / u] _tablename_each 作为触发器名称,这样我总是知道触发器何时触发(之前/之后)哪个事件(插入/删除/更新)以及哪个表。

最好记录触发器在each行触发,因此触发器名称末尾的each

请注意,MySQL不支持每个语句尚未触发一次的触发器(但将来可能会更改)。

答案 1 :(得分: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;