我的语法有什么问题?
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
答案 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;