1

我写了一个触发器,它在 table1 的更新语句后触发。如果根据条件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 行出现错误,我无法理解问题所在

4

2 回答 2

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 ;
于 2013-09-11T13:46:22.023 回答
1

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

尝试这个:

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

DELIMITER ;

正如我在我的示例中那样,您还需要END IFselect语句之后使用 on 和终端END;来匹配您的。begin

于 2013-09-11T13:50:45.967 回答