Mysql

如何使用觸發器根據產品詳細資訊名稱自動遞增 varchar 數據類型

  • April 12, 2018

我有一個產品詳細資訊表,表中的欄位是 Prod_Id、Product_Name、Quantity、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,如 SHOE_001、SHOE_002 等等……!!!

謝謝,阿庫布。

這將起作用

SET NEW.Prod_id = CONCAT('PROD', LPAD(LAST_INSERT_ID(), 3, '0'));
SET NEW.Prod_id = CONCAT(SUBSTRING(NEW.Product_Name,1,2), NEW.Prod_id);

謝謝阿庫布。

  • 將“BO”和“1”儲存為兩列。
  • 索引那對列,以便您可以找到最大值
  • 通過執行獲取行時構造“BO_002” CONCAT(prefix, '_', seq)。(並使用ZEROFILL代替LPAD等)。

引用自:https://dba.stackexchange.com/questions/61005