gpt4 book ai didi

MYSQL触发器创建id

转载 作者:行者123 更新时间:2023-11-29 23:17:27 27 4
gpt4 key购买 nike

我正在尝试从 2 个字段创建一个 id

producten_categorien 填充了以下数据:

productcat_id    productcat_name    productcat_count     productcat_code1                Sound              1                    SOU2                Light              1                    LIG3                Vision             1                    VIS

我想创建一个类似于 VIS0001 (productcat_code + Productcat_count)

的 ID

我总是能拿回 VIS000 你们能帮我吗?

下面你可以看到我的代码:

USE `jarent`;DELIMITER $$CREATE TRIGGER `klanten_BINS`BEFORE INSERT ON `producten`FOR EACH ROWBEGIN  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

最佳答案

首先,在负载下尝试自行维护 id 序列将会惨败。尝试插入新产品的两个 session 很容易产生相同的 product_id

至少使用LAST_INSERT_ID(expr)。最好完全放弃它,只使用 AUTO_INCRMENTLAST_INSERT_ID() 作为 id。

这里所说的是触发器的改进且有效的版本:

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 演示

进一步阅读:

关于MYSQL触发器创建id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27649312/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com