mysql触发器显示错误

时间:2013-08-27 12:22:48

标签: mysql triggers

我希望在我的某个表格中插入时转换字段。

检查& ged's =>检查和geds。

    DELIMITER $$
    CREATE
    TRIGGER `perma_limk_insertion` AFTER INSERT
    ON `tbl_magazine`
    FOR EACH ROW BEGIN

    DECLARE magazine_name VARCHAR(100); 
    @magazine_name := REPLACE(FieldName,'&','and');
    @magazine_name := REPLACE(FieldName,"'",'');
    UPDATE tbl_magazine SET perma_link = magazine_name WHERE MAGAZINE_ID = NEW.MAGAZINE_ID;
   END$$
   DELIMITER ;

这是我的触发器。但我得到了一个错误

 #1064 - 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 '@magazine_name := REPLACE(FieldName,'&','and'); @magazine_name := REPLA' at line 7

如果有人知道这一点。请帮帮我

提前致谢

2 个答案:

答案 0 :(得分:1)

您需要将变量FieldName更改为要在其上运行函数REPLACE的列的名称(在本例中为列名perma_link)。

您的代码将是:

...
@magazine_name := REPLACE(perma_link,'&','and');
@magazine_name := REPLACE(perma_link,"'",'');
UPDATE tbl_magazine SET perma_link = magazine_name WHERE MAGAZINE_ID = NEW.MAGAZINE_ID;
...

答案 1 :(得分:0)

使用13.7.4. SET Syntax

...
SET @magazine_name := REPLACE(FieldName,'&','and');
SET @magazine_name := REPLACE(FieldName,"'",'');
...

何时或何处定义变量:FieldName?

您还应该检查逻辑。例如,@magazine_name9.4. User-Defined Variablesmagazine_name VARCHAR(100)一个13.6.4.1. Local Variable DECLARE Syntax,是不同的变量。

在这种情况下,它会将NULL分配给列perma_link,因为它是magazine_name(从未分配)的值,正在为变量分配@magazine_name