MySQL之前插入触发器填充省略列

时间:2015-02-24 10:31:26

标签: mysql triggers

我正在尝试制作一个触发器,如果​​未在插入查询中显式设置列B,则会使用列A中的值填充B列。 (列B设置为允许NULL并默认为NULL值)

DELIMITER $$
CREATE TRIGGER trigger_name BEFORE INSERT ON my_table FOR EACH ROW
BEGIN
IF (NEW.valueB IS NULL) THEN SET NEW.valueB = NEW.valueA ;
END
$$

但是我收到了这个错误(不是很有用)。

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 4

当我试图找到这个有问题的空字符串时,''使查询像每行一个单词,mysql用' ='标记行。角色有问题。

我仔细检查了查询是否有任何非ascii字符。

我通过命令行使用mysql版本5.5.37-0ubuntu0.12.10.1(例如,不是phpmyadmin)。

2 个答案:

答案 0 :(得分:1)

您需要使用IF

关闭END IF
DELIMITER $$
CREATE TRIGGER trigger_name BEFORE INSERT ON my_table 
FOR EACH ROW
 BEGIN
   IF NEW.valueB IS NULL THEN 
    SET NEW.valueB = NEW.valueA ;
   END IF ;
 END;$$
 delimiter ;

查看此处的示例http://dev.mysql.com/doc/refman/5.5/en/trigger-syntax.html

答案 1 :(得分:0)

您忘了关闭IF语句。阅读语法here。我认为下面的代码对您有用。

DELIMITER $$
CREATE TRIGGER trigger_name BEFORE INSERT ON my_table 
FOR EACH ROW
 BEGIN
   IF (NEW.valueB IS NULL) THEN 
    SET NEW.valueB = NEW.valueA ;
   END IF 
 END $$
DELIMITER