Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在MYSQL中创建触发器时出现语法错误_Mysql - Fatal编程技术网

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

在MYSQL中创建触发器时出现语法错误,mysql,Mysql,我编写了一个触发器,在表1的update语句之后触发。如果表1中没有基于条件的行,则更新表2 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 i

我编写了一个触发器,在表1的update语句之后触发。如果表1中没有基于条件的行,则更新表2

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行的错误,我无法理解这个问题

每个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 ;

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

试试这个:

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

DELIMITER ;

您还需要在
select
语句后的行中添加
END IF
,以及一个终端
END
以匹配您的
begin
,正如我在示例中所做的那样。

我希望在select语句之后的第一个if中包含第二个if语句。我已更改了答案。但它在declare语句中仍然会给我相同的错误。请帮助我。请注意,您在first SELECT中设置了@cnt变量,但使用了cnt变量。我对此查询没有问题。还要注意使用分隔符。但首先要解决触发器内部的问题。非常感谢。它帮助了我