0

我在表名 agent_mst 上创建了一个 MySQL 触发器,如下所示

BEGIN
    DECLARE max_id INT;

    SET max_id=(SELECT MAX(agent_id_pk)+1 FROM `agent_mst`);
    IF (max_id IS NULL) THEN
        SET max_id=1;
    END IF;

    SET NEW.date_added=NOW(),
        NEW.date_updated=NOW(),
        NEW.agent_code = CONCAT('SDA', LPAD(max_id, 4,'0'));

END

所以它的作用是,每次我们插入一条记录时,它都会生成 agent_code 字段值,例如SDA0001、SDA0002、SDA0003 ......

现在假设我删除一条代码为SDA0003的记录并插入新记录,它肯定会生成代理代码为SDA0004。因为它正在使用max_id并将其增加 1。但在这里我想再次获得SDA0003。这样所有的agent_codes都可以保持顺序。怎么做?

提前致谢。

4

2 回答 2

1

you need to identify the first (smallest) missing id. check out in this link, a nice way to do it in a select query: Find mininum not used value in mysql table

于 2012-12-26T11:01:31.950 回答
0

要知道下一个自动增量 ID,请尝试在查询下方运行并检查“Auto_increment”列:

SHOW TABLE STATUS FROM DBName where name = 'tableName' 
于 2012-12-26T10:48:54.843 回答