2015-10-13 24 views
-1

我在wordpress数据库表wp_options上创建一个触发器,但每次都会给出语法错误。更新触发器之前的MYSQL问题

#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 ; 

但是又得到了同样的错误。

回答

0

两三以触发问题:

  1. 语法:
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 ; 
  • RENAME TABLE原因隐式提交:
  • 显式或隐式提交不允许我n存储的功能或 触发器。见13.3.3 Statements That Cause an Implicit Commit