首页 > 解决方案 > 如何在插入前使用mysql触发器生成动态ID

问题描述

我需要生成 student_roll_no like20191B01;我想增加 student_roll_no like 的最后两位数字20191B02,..........20191B10,20191B1120191B09使用以下代码,我可以在那之后起床20191B010,但我需要20191B10.

SET NEW.student_roll_no = CONCAT(
   YEAR(CURRENT_DATE), 
   NEW.class_code,
   IFNULL(CONCAT('0',(substring((SELECT student_roll_no FROM students WHERE class_code = NEW.class_code ORDER BY created_at DESC LIMIT 1),-2)+1)),'01'))

标签: mysqltriggers

解决方案


如果您有固定的两位学号,请使用 LPAD。参考

否则此代码段可能会有所帮助:

SET @number = IFNULL(
                ( substring( ( SELECT `cache`.`value` FROM `cache` ORDER BY `cache`.`value` DESC LIMIT 1 ),- 2 ) + 1 ),
                '1' 
            );

SET NEW.student_roll_no = CONCAT(
    YEAR ( CURRENT_DATE ),
    NEW.class_code,
    IF
        (
            @number < 10,
            CONCAT('0',@number),
            @number 
        ) 
    );

推荐阅读