这里我使用触发器自动增加字段' 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列
答案 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。