每当我尝试插入新记录时,MySQL触发器都不起作用

时间:2013-05-31 20:08:10

标签: mysql

我正在尝试重新创建我从T-SQL创建的函数到MySQL,而我在使Trigger工作时遇到了困难。

这是我应该做的: 1.我需要创建一个基于以下格式创建特殊ID的函数: date - 6digit代码,它将是增量的实际ID

  1. 接下来我需要创建一个触发器,当我尝试插入新记录时,它会调用我创建的函数来生成ID。
  2. 这就是我的所作所为:

    -- created the table first
    DROP TABLE abc
    Create table abc
    (
        IDnumber INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
        name varchar(32)
    )
    
    -- Function
    DROP FUNCTION GenerateID
    
     CREATE FUNCTION GenerateID (id int)
     RETURNS VARCHAR(10) 
           RETURN CONCAT(substr((cast(CURDATE() as char(10))),3,2), '-', right(concat('000000', cast( id as char(6) ) ), 6) );
    
    
    -- create the Trigger
    
        DELIMITER ||
    CREATE TRIGGER ID_Insert BEFORE INSERT ON ABC
    FOR EACH ROW 
    BEGIN
        UPDATE abc
            SET abc.IDNumber = generateID(abc.IDNumber) ;
    --     FROM abc 
    --    INNER JOIN Inserted ON abc.IDNumber = inserted.IDNumber;
    END
    
    ||
    

    我注释掉了部分--FROM abc和 - INNER JOIN部分,因为这是我在T-SQL中使用的语法。我试着在这里应用它,但是我遇到了语法错误。现在触发器已成功创建,但问题是我现在开始插入记录。

     insert into abc (name) values('cammie')
      insert into abc (name) values('helios')
    etc
    

    我收到错误1442,说'无法使用触发器/函数更新表,因为它已经在调用此函数的语句中使用/ sp

    你认为我错过了什么?

1 个答案:

答案 0 :(得分:1)

在触发器主体中,只需使用

,而不是尝试更新已更新的表
SET NEW.IDNumber = generateID(abc.IDNumber) ;