我有一个难题,我需要让MySQL数据库根据输入的新客户名称的前3个字符创建客户编号,并添加一个递增值。例如:
表客户端:
+----+----------------------------------------------+--------------+
| id | clientName | clientNumber |
+----+----------------------------------------------+--------------+
| 1 | Accelerated Learning | ACC00 |
| 2 | Acceleration Systems | ACC01 |
| 3 | Acme,Inc. | ACM00 |
通常,我会在前端的提交表单中执行此操作,但是由于无法解释的原因,规范希望数据库对此进行处理。我正在尝试编写类似这样的内容,但无法正确完成:
触发器:
CREATE DEFINER = CURRENT_USER TRIGGER `crmdev`.`clients_BEFORE_INSERT` BEFORE INSERT ON `clients` FOR EACH ROW
BEGIN
DECLARE prefix varchar(3);
DECLARE suffix INT(3);
SET prefix = SUBSTRING(NEW.clientName,1,3);
SET suffix = (
SELECT COUNT(*),SUBSTRING(clientName,1,3) = prefix + 1;
SET NEW.clientNumber = CONCAT(prefix,suffix);
END
在此先感谢您的帮助/指导!
答案 0 :(得分:0)
您在suffix
分配中存在语法错误。您缺少FROM
和WHERE
子句,需要将1
添加到计数中,而不是添加到prefix
中。
SET suffix = (
SELECT COUNT(*)+1
FROM clients
WHERE SUBSTRING(clientName,1,3) = prefix);
答案 1 :(得分:0)
如果对他人有帮助,这里是成品,感谢Barmar:
触发器:
DECLARE prefix varchar(3);
DECLARE suffix INT(3);
SET prefix = SUBSTRING(NEW.clientName,1,3);
SET suffix = (
SELECT COUNT(*)+1
FROM clients
WHERE SUBSTRING(clientName,1,3) = prefix);
SET NEW.clientNumber = UPPER(CONCAT(prefix,LPAD(suffix,3,0)));