0
我想在下面的格式创建自定义ID为我的表SQL触发器的查询
2随机字母 - 00MaxID
的如:AA-001
我试图写一个查询但它不起作用,这是我第一次写一个触发器,也写这样的复杂查询。
更新时间 - 2
以下查询给了我近一个错误 “SELECT COUNT(cus_id)INTO @ct FROM客户;”
CREATE
TRIGGER `id_gen` BEFORE INSERT
ON `testdb`.`customer`
FOR EACH ROW BEGIN
SELECT count(cus_id) INTO @ct FROM customer;
IF @ct < 1000 THEN
SET @cs_id = LPAD(@ct+1, 3, 0);
ELSE
SET @cs_id = @ct+1;
END IF;
SET NEW.cus_id = CONCAT(CHAR(FLOOR(65 + RAND() * 26),FLOOR(65 + RAND() * 26)),'-',@cs_id);
END;
错误
SQL query: Documentation
CREATE
TRIGGER `id_gen` BEFORE INSERT
ON `testdb`.`customer`
FOR EACH ROW BEGIN
SELECT count(cus_id) INTO @ct FROM customer
MySQL said: Documentation
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '' at line 6
我做过关于触发器的研究,并已更新我的查询。但我无法使它工作大声笑。 – Syed
你几乎有:1)你需要一个触发“之前”(否则你不能改变你行的值)b)您不能使用'更新客户... where',只要使用'设置new.cus_id = ... '。在当前表中,你只能操作当前行,这是'new.'引用的。c)在你的'ELSEIF'中有一个'THEN'丢失。 d)您可能错误地使用了“lpad”。 'lpad(string,3,0)'会给你一个长度为3的字符串,而不是添加3 0。您可能的意思是:如果@ct <1000,则设置@cs_id = LPAD(@ct,3,0);其他SET @cs_id = @ct; END IF;'(目前,你会得到'... LY-009,CA-10,... GQ-99,JU-100') – Solarflare
(目前,你会得到... LY-009,CA-10, ... GQ-99,JU-100)我实际上需要这些类型的ID,这就是为什么我使用了这些条件。我按照你的建议更新了代码。 'lpad(string,3,0)'会给我一个'length 3'的值,如果这个字符串本身的长度为2,那么它的开头就会加上0。 **但**我在这一行上得到语法错误'SELECT count(cus_id)INTO @ct FROM customer;'任何想法如何使用计数? – Syed