简体   繁体   English

MySQL TRIGGER语法,如果可以插入

[英]MySQL TRIGGER syntax, IF THEN INSERT

I want to modify a working trigger that looks like this: 我想修改一个看起来像这样的工作触发器:

CREATE TRIGGER j_update BEFORE UPDATE ON d
FOR EACH ROW
     INSERT INTO j (
             stampOld, stampNew
     )
     VALUES (
             OLD.stamp, NEW.stamp
     );

to execute only on the success of an IF statement. 仅在IF语句成功时执行。 I can't get the right syntax for this modification. 我无法为此修改获得正确的语法。

I'm trying to achieve the following: 我正在努力实现以下目标:

 CREATE TRIGGER j_update BEFORE UPDATE ON d
 FOR EACH ROW
     IF (1=1) THEN
         INSERT INTO d (
             stampOld, stampNew
         )
         VALUES (
             OLD.stamp, NEW.stamp
         );                        /*  <--- LINE 21  */
     END IF;

Result: ERROR 1064: Check for right syntax near '' at line 21 结果:错误1064:在第21行的“”附近检查正确的语法

Things I've tried: 我尝试过的事情:

  • wrapping the IF ... END IF; 包装IF ... END IF; in BEGIN .. END; BEGIN .. END;
  • switching delimiter to $$ 将分隔符切换为$$

I'm using MySQL 5.0.95 for RHEL. 我正在为RHEL使用MySQL 5.0.95。

Any help is greatly appreciated. 任何帮助是极大的赞赏。

Try this 尝试这个

delimiter //
CREATE TRIGGER j_update BEFORE UPDATE ON d
FOR EACH ROW
BEGIN
     IF 1=1 THEN
         INSERT INTO d (
             stampOld, stampNew
         )
         VALUES (
             OLD.stamp, NEW.stamp
         );                       
     END IF;
END; //
delimiter ;

Here is one I just tried on my mysql but its for update almost same with your logic 这是我刚在mysql上尝试过的,但是其更新与您的逻辑几乎相同

mysql> delimiter //
mysql> create trigger tbl_two_ins 
    -> after insert on tabletwo 
    -> for each row
    -> begin  
    ->   if 1=1 then
    ->     update tableone t1 set t1.tb2_id = new.tab2_id where t1.tb1_id = new.tb1_id ; 
    ->   end if ;
    -> end ; //
Query OK, 0 rows affected (0.56 sec)

mysql> delimiter ;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM