我有一个产品详细信息表,表中的字段是* Prod_Id,Product_Name,Quantity,Prefix,Slno *。现在我已经为varchar数据类型字段创建了触发器,并为Prod_Id(主键)和Slno实现了自动增量。输出将是
Prod_Id - >>> PROD0001,PROD0002等。现在,如果产品名称为RACK,则应创建一个ID为RACK_001,其中包含产品名称的开头两个字母并自动自动递增。对于所有产品名称,它应该相应地创建,如何做到这一点。
截至目前,我正在使用varchar数据类型中的自动增量触发器。帮助触发代码。
DELIMITER $$
CREATE TRIGGER tg_product_details_INSERT
BEFORE INSERT ON product_details
FOR EACH ROW
BEGIN
INSERT INTO product_details_seq VALUES (NULL);
SET NEW.Created_Date = NOW();
SET NEW.Submitted_Date = NOW();
SET NEW.Slno = coalesce((select max(Slno) from product_details), 0) + 1;
SET NEW.Prod_id = CONCAT((NEW.Prefix), LPAD(LAST_INSERT_ID(), 3, '0'));
END
DELIMITER ;
产品名称 - >>书,鞋,连衣裙,家具
对于所有图书,它应该创建一个自动增量ID BOOK_001,BOOK_002 ,对于所有 Shoe ,它应该创建一个自动增量ID,如< strong> SHOE_001,SHOE_002 等等...... !!!
谢谢, Acube。
答案 0 :(得分:0)
为什么要在同一个表中执行insert
?我认为其余的代码应该可以工作,没有:
DELIMITER $$
CREATE TRIGGER tg_product_details_INSERT
BEFORE INSERT ON product_details
FOR EACH ROW
BEGIN
SET NEW.Created_Date = NOW();
SET NEW.Submitted_Date = NOW();
SET NEW.Slno = coalesce((select max(Slno) from product_details), 0) + 1;
SET NEW.Prod_id = CONCAT('PROD', NEW.SLno, 3, '0'));
END$$
DELIMITER ;
这是使用相同的值手动设置slno
和prod_id
,该值应该比表中的值大1。我想你也也可以查询元数据以获取下一个自动增量值:
select AUTO_INCREMENT
from information_schema.tables
where table_name = 'product_details' and table_schema = database();
答案 1 :(得分:0)
您可以使用NEW.Product_Name
获取产品名称。
找到子字符串,即前两个字母。请参阅此link。
然后在执行SET NEW.Prod_id = ...
CONCAT('PROD', LPAD(LAST_INSERT_ID(), 3, '0'));