在MYSQL中创建触发器时出现语法错误

时间:2013-09-11 13:30:35

标签: mysql

我写了一个触发器,它在table1的update语句之后被触发。如果table1中没有基于条件的行,则更新table2。

CREATE TRIGGER trigger1 
    AFTER UPDATE ON my_database.table1
FOR EACH ROW
BEGIN
DECLARE cnt int;
IF new.column1 = 1 THEN
   SELECT COUNT(1) INTO @cnt FROM my_database.table1 
   WHERE userID = 1 AND isDeleted = 0;
IF cnt = 0 THEN
   UPDATE my_database.table2 
   SET isDeleted = 1 
   WHERE userSeqID = new.userID;
END IF

它给了我第4行的错误,我无法理解这个问题

2 个答案:

答案 0 :(得分:1)

每个IF语句都必须以END IF子句结束。试试这句话 -

DELIMITER $$

CREATE TRIGGER trigger1
  AFTER UPDATE
  ON my_database.table1
  FOR EACH ROW
BEGIN
  DECLARE cnt int;
  IF NEW.column1 = 1 THEN
    SELECT COUNT(1) INTO cnt FROM my_database.table1 WHERE userID = 1 AND isDeleted = 0;

    IF cnt = 0 THEN
      UPDATE my_database.table2 SET isDeleted = 1 WHERE userSeqID = NEW.userID;
    END IF;
  END IF;
END$$

DELIMITER ;

答案 1 :(得分:1)

第4行的错误是因为你没有使用分隔符。

试试这个:

DELIMITER //
create trigger trigger1 after update on my_database.table1
for each row
begin
declare cnt int;
...
end if;
END;//

DELIMITER ;

您需要END IF语句后面的select和终端END;以匹配您的begin,就像我的示例中所示。