我试图从2个字段中创建一个id
producten_categorien 填充了以下数据:
productcat_id productcat_name productcat_count productcat_code 1 Sound 1 SOU 2 Light 1 LIG 3 Vision 1 VIS
我想创建一个像VIS0001 (productcat_code + productcat_count)
我总是让VIS000回来你们能帮助我吗?
USE `jarent`; DELIMITER $$ CREATE TRIGGER `klanten_BINS` BEFORE INSERT ON `producten` FOR EACH ROW BEGIN DECLARE productcat VARCHAR(45); DECLARE productcatcount INT unsigned; SELECT productcat_code INTO productcat FROM producten_categorien WHERE productcat_id = NEW.product_catid; SELECT productcat_count INTO productcatcount FROM producten_categorien WHERE productcat_id = NEW.product_catid; SET productcatcount = productcatcount + 1; UPDATE producten_categorien SET productcat_count = productcatcount WHERE productcat_id = NEW.product_catid; SET NEW.product_id = CONCAT(productcat, LPAD(productcatcount, 4, '0')); END
答案 0 :(得分:0)
首先,尝试自己维护id序列将在负载下失败。尝试插入新产品的两个会话可以轻松生成相同的product_id
。
至少使用LAST_INSERT_ID(expr)
。更好的是完全放弃它,只需使用AUTO_INCREMENT
和LAST_INSERT_ID()
作为ids。
这里说的是你的触发器的改进和工作版本:
DELIMITER $$
CREATE TRIGGER klanten_BINS
BEFORE INSERT ON producten
FOR EACH ROW
BEGIN
DECLARE productcat VARCHAR(45);
UPDATE producten_categorien
SET productcat_count = LAST_INSERT_ID(productcat_count + 1)
WHERE productcat_id = NEW.product_catid;
SELECT productcat_code INTO productcat
FROM producten_categorien
WHERE productcat_id = NEW.product_catid;
SET NEW.product_id = CONCAT(productcat, LPAD(LAST_INSERT_ID(), 4, '0'));
END$$
DELIMITER ;
这是 SQLFiddle 演示
进一步阅读: