如何用字母和数字自动递增ID号

问题描述 投票:0回答:7

如何使用字母和数字自动递增 ID 号,例如“KP-0001”它将递增到“KP-0002”

谢谢!

mysql sql phpmyadmin
7个回答
5
投票

这是一篇有用的文章

但基本上我鼓励您在此基础上创建自己的算法。您可以在

BEFORE INSERT
触发器中添加该算法。或者您可以在前端执行此操作。

算法伪代码示例

  • 获取最后一个ID [KP-0001]
  • 删除一些字符并将其放入变量中[KP-]
  • 将剩余部分转换为数字,因为它是字符串 [0001]
  • 增加 1 [1 + 1 = 2]
  • 将其转换回字符串并在右侧补零 [0002]
  • 连接变量和新增加的数字 [KP-0002]
  • 保存它。

2
投票

我尝试了很多方法,但无法找到解决方案...我也使用了触发器,但这也没有帮助我...

但我找到了一个快速解决方案......

例如,您希望您的员工拥有员工代码“emp101”、“emp102”等。 这也带有自动增量...

首先创建一个包含三个字段的表,第一个字段包含您想要开头的字母,即“emp”,第二个字段包含自动递增的数字,即101,102,..等,第三个字段包含两者,即'emp101','emp102',...等等

CREATE TABLE employee
(
empstr varchar( 5 ) default 'emp',
empno int( 5 ) AUTO_INCREMENT PRIMARY KEY ,
empcode varchar( 10 )
);

现在为 empno 提供一个 auto_increment 值。

ALTER TABLE employee AUTO_INCREMENT=101;

现在进入主题...每次插入值时,您都必须连接前两个字段才能获取第三个字段的值

INSERT INTO employee( empcode )
VALUES ('xyz');
UPDATE employee SET empcode = concat( empstr, empno ) ;

1
投票

您无法自动递增 varchar 数据类型。另一种方法是将 varchar 列分为两个不同的列,一个将具有整数部分,另一个将具有字母,就像您的情况一样

KP-
一旦您自动递增所有整数行,只需连接这两列


1
投票
    
创建表客户(
        CUSId INT NOT NULL IDENTITY(1, 1) 主键
        ,CUSKey AS 'Cus' + RIGHT('000' + CONVERT(VARCHAR(5), CUSId), 6) 保留
        ,客户姓名 VARCHAR(50)
        ,mobileno INT
        ,性别 VARCHAR(10)
        )

0
投票

自动增量是一个整数,因此无法添加文本。

查看这个问题以获取其他参考。


0
投票

制作一个过程,在我的例子中是 MySQL。

CREATE PROCEDURE MOSTRAR_CODIGO_CLASE_PRODUCTO()
BEGIN
    declare max varchar(10);
    declare num int;
    declare CCodigo varchar(10);
    
    set max = (select MAX(Codigo_CP) from CLASE_PRODUCTO);
    set num = (SELECT LTRIM(RIGHT(max,4)));
    if num>=1 and num <=8 then
        set num = num + 1;
        set CCodigo = (select concat('CP000'  ,  CAST(num as CHAR)));
    elseif num>=9 and num <=98 then
        set num = num + 1;
        set CCodigo = (select concat('CP00'  ,  CAST(num as CHAR)));
    elseif num>=99 and num <=998 then
        set num = num + 1;
        set CCodigo = (select concat('CP0'  ,  CAST(num as CHAR)));
    elseif num>=999 and num <=9998 then
        set num = num + 1;
        set CCodigo = (select concat('CP'  ,  CAST(num as CHAR)));
    else 
        set CCodigo=(select 'CP0001');
    end if;
    
    SELECT MAX(CCodigo) AS Codigo_CP FROM CLASE_PRODUCTO;
END $


Java Class

public static boolean insertarClaseProducto(ClaseP cp){
        boolean resp = false;
        
        Connection cn;
        Connection con = new Connection();
        cn = con.connect();              
        
        try{
            CallableStatement cs = cn.prepareCall("CALL REGISTRAR_CLASE_PRODUCTO (?)");
            cs.setString(1, cp.getNombreCP());
            int i = cs.executeUpdate();
            
            if(i==1)
                resp = true;
            else
                resp = false;
            
        }catch(Exception e){System.out.println(e);}
        return resp;
    }

返回:

Codigo_MP   Nombre_MP    Estado_MP
MP0001      LG           HAB
MP0002      GENIUS       HAB
MP0003      MICRONICS    HAB
MP0004      SONY         HAB
MP0005      PANASONIC    HAB

0
投票

要在MySQL中自动增加字母和数字组合的ID号,例如生成U00000001、U00000002等ID,可以使用MySQL触发器和字符串操作函数的组合。由于 MySQL 的 AUTO_INCRMENT 功能仅适用于数值,因此此方法涉及生成一个自定义 user_code,该用户代码将前缀字母(如“U”)与根据最后插入的记录自动递增的数值相结合。

步骤: 创建表:定义一个具有 AUTO_INCRMENT 主键 (id) 和存储自定义 ID 的 user_code 列的表。 触发器实现:使用 BEFORE INSERT 触发器可以: 从表中检索最后插入的 id(使用 MAX(id))。 将新行的 id 加 1。 将字母前缀 ('U') 与补零的数字组合起来形成最终的 user_code。 处理空表:触发器还确保如果表中没有现有行,则第一条记录以 U00000001 开头。 该解决方案确保每次插入新记录时,都会根据之前的 id 自动生成格式为 U00000001、U00000002 等的 user_code。

CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
user_code VARCHAR(20));

DELIMITER //

CREATE TRIGGER before_insert_user_code
BEFORE INSERT ON users
FOR EACH ROW
BEGIN


DECLARE last_id INT;

-- Get the last id, if exists
SELECT IFNULL(MAX(id), 0) INTO last_id FROM users;

-- Generate the user_code by adding 1 to the last id
SET NEW.user_code = CONCAT('U', LPAD(last_id + 1, 8, '0'));
END; //

DELIMITER ;
© www.soinside.com 2019 - 2024. All rights reserved.