MYSQL触发器来创建id

时间:2014-12-25 17:21:13

标签: mysql triggers

我试图从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)

这样的ID

我总是让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

1 个答案:

答案 0 :(得分:0)

首先,尝试自己维护id序列将在负载下失败。尝试插入新产品的两个会话可以轻松生成相同的product_id

至少使用LAST_INSERT_ID(expr)。更好的是完全放弃它,只需使用AUTO_INCREMENTLAST_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 演示

进一步阅读: