如何使用触发器根据产品详细信息的名称自动增加varchar数据类型

时间:2014-03-15 13:03:16

标签: mysql sql triggers

我有一个产品详细信息表,表中的字段是* 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。

2 个答案:

答案 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 ;

这是使用相同的值手动设置slnoprod_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'));