Mysql 创建触发器时出现语法错误

Mysql 创建触发器时出现语法错误,mysql,sql,Mysql,Sql,我试图在MySQL中创建一个新的触发器,但不管我怎么做,我都会遇到语法错误。我想在html\u id列中插入一个值,它是字母f和列id的串联: CREATE TRIGGER htmlid BEFORE INSERT ON makelist_food FOR EACH ROW BEGIN IF (NEW.html_id IS NULL) THEN NEW.html_id = CONCAT('f', NEW.id); END IF; END 我也试过: CREATE TRIGGER

我试图在MySQL中创建一个新的触发器,但不管我怎么做,我都会遇到语法错误。我想在
html\u id
列中插入一个值,它是字母
f
和列
id
的串联:

CREATE TRIGGER htmlid 
BEFORE INSERT ON makelist_food
FOR EACH ROW
BEGIN
  IF (NEW.html_id IS NULL) THEN
  NEW.html_id = CONCAT('f', NEW.id);
  END IF;
END
我也试过:

CREATE TRIGGER htmlid 
BEFORE INSERT ON makelist_food
FOR EACH ROW
BEGIN
  IF (NEW.html_id IS NULL) THEN
  INSERT INTO makelist_food SET html_id = CONCAT('f', NEW.id);
  END IF;
END
和此(更改分隔符):

我得到的错误是:#1064-您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以了解第6行“.html_id=CONCAT('f',NEW.id')附近使用的正确语法


我正在运行MySQL 5.5.22。

尝试以下查询:

delimiter |

    CREATE TRIGGER htmlid 
    BEFORE INSERT ON makelist_food
    FOR EACH ROW
    BEGIN
      IF (NEW.html_id IS NULL) THEN
      INSERT INTO makelist_food SET html_id = CONCAT('f', NEW.id);
      END IF;
    END
    |
    delimiter ;

我认为区别在于SET关键字。试试这个

DELIMITER $$

CREATE TRIGGER htmlid 
BEFORE INSERT ON makelist_food
FOR EACH ROW
BEGIN
  IF (NEW.html_id IS NULL) THEN
     SET NEW.html_id = CONCAT('f', NEW.id);
  END IF;
END$$

DELIMITER ;

这很有效,谢谢!您更改的唯一内容是将分隔符从$$更改为|,并键入小写的delimiter关键字。使用$$作为分隔符有任何已知问题吗?我认为区别在于SET关键字
DELIMITER $$

CREATE TRIGGER htmlid 
BEFORE INSERT ON makelist_food
FOR EACH ROW
BEGIN
  IF (NEW.html_id IS NULL) THEN
     SET NEW.html_id = CONCAT('f', NEW.id);
  END IF;
END$$

DELIMITER ;