如果在MySQL触发器中

如果在MySQL触发器中,mysql,triggers,Mysql,Triggers,尝试创建MySql触发器 CREATE TRIGGER updVisible AFTER UPDATE ON photos FOR EACH ROW BEGIN IF NEW.Status = 2 THEN UPDATE otherTable SET IsVisible=0 WHERE PID=NEW.PID END IF; END; 但我有一个错误: 您的SQL语法有错误; 检查相应的手册 您的MySQL服务器版本 在中使用接近'END IF'的正确语法 第

尝试创建MySql触发器

CREATE TRIGGER updVisible AFTER UPDATE ON photos
FOR EACH ROW 
BEGIN
    IF NEW.Status = 2 THEN
        UPDATE otherTable SET IsVisible=0 WHERE PID=NEW.PID
    END IF;
END;
但我有一个错误:

您的SQL语法有错误; 检查相应的手册 您的MySQL服务器版本 在中使用接近'END IF'的正确语法 第6行

MySQL版本:5.1.41-community 我做错了什么

UPD1。这没用

DELIMITER //
CREATE TRIGGER updVisible AFTER UPDATE ON photos
FOR EACH ROW 
BEGIN
    IF NEW.Status = 2 THEN
        UPDATE otherTable SET IsVisible=0 WHERE PID=NEW.PID
    END IF
END//
DELIMETER ;
错误:

错误代码:1064您在中有错误 您的SQL语法;检查手册 对应于您的MySQL服务器 要使用的正确语法的版本 接近第6行的“如果结束,则结束”


我有根访问权限,并且使用MySql Workbench 5.2.31 CE

U会遇到一些syntex问题..像这样使用

CREATE TRIGGER updVisible AFTER UPDATE ON photos
FOR EACH ROW 
BEGIN
    IF NEW.Status = 2 THEN
        UPDATE otherTable SET IsVisible=0 WHERE PID=NEW.PID
    END IF
END//

它看起来像是丢失的分号

PID=NEW.PID;

在phpMyAdmin中,可以在SQL窗口中创建触发器

您可能需要将Delimeter设置为类似
$
的值,而不是默认值
。您可以从SQL窗口的底部轻松地进行更改

此外,确保使用
END
命令关闭触发器块-

DELIMITER $$

CREATE TRIGGER `tutorial`.`before_delete_carts`  
     BEFORE DELETE ON `trigger_carts` FOR EACH ROW  
     BEGIN  
         DELETE FROM trigger_cart_items WHERE OLD.cart_id = cart_id;  
     END $$ 
DELIMITER ;

这在我的机器里工作

mysql> DELIMITER //
mysql> CREATE TRIGGER test1 AFTER UPDATE ON test
    -> FOR EACH ROW
    -> BEGIN
    ->     IF NEW.itemId = '2' THEN
    ->         UPDATE test1 SET col1=0 WHERE col2=NEW.`value`;
    ->     END IF;
    -> END//
Query OK, 0 rows affected (0.05 sec)

mysql> DELIMiTER ;
mysql> desc test;
+--------+--------------+------+-----+---------+-------+
| Field  | Type         | Null | Key | Default | Extra |
+--------+--------------+------+-----+---------+-------+
| itemId | varchar(100) | YES  |     | NULL    |       |
| key    | varchar(100) | YES  |     | NULL    |       |
| value  | varchar(100) | YES  |     | NULL    |       |
+--------+--------------+------+-----+---------+-------+
3 rows in set (0.01 sec)

mysql> desc test1;
+-------+--------------+------+-----+---------+-------+
| Field | Type         | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| col1  | varchar(100) | YES  |     | NULL    |       |
| col2  | varchar(100) | YES  |     | NULL    |       |
+-------+--------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

mysql>

顺便说一句,您似乎忘记声明分隔符//
。添加了DELIMETER/,但我得到了相同的错误:错误代码:1064您的SQL语法有错误;检查与MySQL服务器版本相对应的手册,以了解第行“END IF END”附近使用的正确语法6@Lari13拉里曼,在前面使用
分隔符/
分隔符在上面编写的代码之后。没有帮助:(更新了我的问题尝试了“;”和“/”-相同的错误此答案实际上解释了问题,应该有更多的投票
DELIMETER;
应该是
分隔符;