DROP TRIGGER IF EXISTS before_inventory_insert;
DROP TRIGGER IF EXISTS after_inventory_insert;
DELIMITER //
CREATE TRIGGER before_inventory_insert
BEFORE INSERT ON inventory
FOR EACH ROW
BEGIN
DECLARE next_item_id INT;
-- 获取当前表的下一个自增 ItemID
SELECT IFNULL(MAX(ItemID), 0) + 1 INTO next_item_id
FROM inventory;
-- 生成 ItemCode,格式为 I_YYYYMMDDHHMMSS_XXXXXXX
SET NEW.ItemCode = CONCAT('I_', DATE_FORMAT(NOW(), '%Y%m%d%H%i%S'), '_', LPAD(next_item_id, 7, '0'));
END//
DELIMITER ;
要求:“特殊格式自动编写,要求必须是大写的I开头,接着是精确到秒的时间,再加上第几个入库的,例如:I_20240901220846_0000001”,
-
ItemCode
的格式将是I_YYYYMMDDHHMMSS_XXXXXXX
。
'I_'
是ItemCode
的固定前缀。DATE_FORMAT(NOW(), '%Y%m%d%H%i%S')
获取当前时间,格式化为YYYYMMDDHHMMSS
格式,表示精确到秒的时间戳。LPAD(next_item_id, 7, '0')
将next_item_id
左填充为 7 位,不足的部分用0
填充。例如,如果next_item_id
是1
,则它将被格式化为0000001
。