更新触发器问题之前的MYSQL

时间:2015-10-13 13:28:29

标签: mysql database triggers

我在wordpress数据库表wp_options上创建了一个触发器,但每次都会出现语法错误。

  

#1064 - 您的SQL语法出错;检查与MySQL服务器版本对应的手册,以获得正确的语法   靠近''在第6行

这是我的触发器:

CREATE TRIGGER WpafDbDefaultTableRenameTrigger 
    BEFORE UPDATE 
    ON wp_options
      FOR EACH ROW BEGIN
        IF NEW.option_name = "wpaf_db_table_name" AND NEW.option_value != OLD.option_value THEN
          SET NEW.option_value = CONCAT("wp_",NEW.option_value);
          RENAME TABLE OLD.option_value TO NEW.option_value;
        END IF;
       END;

我尝试了here给出的解决方案。使用此解决方案后,我的触发器是

DELIMITER $$
CREATE TRIGGER WpafDbDefaultTableRenameTrigger 
    BEFORE UPDATE 
    ON wp_options
      FOR EACH ROW BEGIN
        IF NEW.option_name = "wpaf_db_table_name" AND NEW.option_value != OLD.option_value THEN
          SET NEW.option_value = CONCAT("wp_",NEW.option_value)$$
          RENAME TABLE OLD.option_value TO NEW.option_value$$
        END IF$$
       END$$
DELIMITER ;

但又得到了同样的错误。

1 个答案:

答案 0 :(得分:0)

触发器有几个问题:

  1. 语法:
  2. DELIMITER $$
    
    CREATE TRIGGER WpafDbDefaultTableRenameTrigger
    BEFORE UPDATE ON wp_options
    FOR EACH ROW
    BEGIN
       IF NEW.option_name = "wpaf_db_table_name" AND
          NEW.option_value != OLD.option_value
       THEN
       /*
          SET NEW.option_value = CONCAT("wp_",NEW.option_value)$$
          RENAME TABLE OLD.option_value TO NEW.option_value$$
       END IF$$
       */
          SET NEW.option_value = CONCAT("wp_",NEW.option_value);
          RENAME TABLE OLD.option_value TO NEW.option_value;
       END IF;
    END$$
    
    DELIMITER ;
    
    1. RENAME TABLE导致隐式提交:
    2.   

      存储函数或不允许显式或隐式提交   触发。请参阅13.3.3 Statements That Cause an Implicit Commit