使用前缀和整数递增值的触发器出错。

时间:2015-03-18 09:33:07

标签: mysql triggers

这里我使用触发器自动增加字段' Project_Id'带有前缀字符串。 首先,我检索最后一条记录并存储到变量中。该记录的子字符串存储到另一个变量中,然后转换为整数。

delimiter //
     CREATE OR REPLACE TRIGGER tg_project_master
     BEFORE INSERT ON project_master
     FOR EACH ROW
     BEGIN
     DECLARE selectid VARCHAR(20);
     DECLARE selid VARCHAR(20);
    DECLARE autoi INT DEFAULT 0;
    SET selectid := (select Project_id from project_master order by Project_id desc limit 1);
    SET selid := SUBSTRING_INDEX(selectid,'O',-1);
    SET autoi := 1+ CAST(@selectid AS INT);
    INSERT INTO project_master SET NEW.Project_id = CONCAT('PRJ',@autoi);
END; //
DELIMITER;

使用1递增值后,我将重新插入表(Project_master)。

这是我得到的错误。

  

错误代码1064,SQL状态42000:您的SQL语法中有错误;查看与您的MySQL服务器版本对应的手册,以便在“TRIGGER tg_project_master”附近使用正确的语法   在插入project_master之前   对于每一行   开始   DEC'在第1行   第2行第1列

2 个答案:

答案 0 :(得分:0)

根据documentation,您不能CREATE OR REPLACE触发,而只能CREATE。请执行以下操作:

DROP TRIGGER IF EXISTS tg_project_master;

delimiter //
CREATE TRIGGER tg_project_master
  BEFORE INSERT ON project_master
  FOR EACH ROW
  ....
END; //
DELIMITER;

答案 1 :(得分:0)

 delimiter //
 CREATE TRIGGER tg_project_master
 BEFORE INSERT ON project_master
 FOR EACH ROW
 BEGIN
     DECLARE selectid INT DEFAULT 0;
     SET selectid := (select CONVERT(SUBSTRING_INDEX(Project_id,'O',-1),UNSIGNED INTEGER) AS num  from project_master order by Project_id desc limit 1);
     SET selectid := selectid + 1;
     SET NEW.Project_id = CONCAT('PRO',selectid);
END; //
DELIMITER;

问题是我在不需要时使用@符号并使用CAST()而不是Convert()函数。 现在,当我按以下格式插入新记录时,会插入我自动增加的Prefixed Id。