gpt4 book ai didi

mysql - 如何在java中生成唯一的序列号?

转载 作者:行者123 更新时间:2023-11-29 11:41:08 25 4
gpt4 key购买 nike

我需要创建一个实体表单,该表单在数据库中具有唯一标识列,但它不是主键列,我需要在表单创建页面中显示它。我已将此列设置为 UNIQUE 并且不为空。现在,每当我创建新用户、员工或任何实体时,我都需要生成一个类似这种格式的序列号并将其显示在表单中,

ID_001, ID_002 ... ID_00N and so on.

EMP_001, EMP_002 ... EMP_00N and so on.

当三位数序列号达到最大限制 999 时。序列号应生成四位数字,直到达到 9999,员工代码将类似于 EMP_1000。因此,当我在创建表单时获取最后一个插入 ID 时,如果多个用户同时创建,它将无法工作,并且会出现冲突。我考虑过创建一个像 sequence_generator 这样的新表。我在其中存储实体最后插入 ID 的键值对。因此,每当发生下一次插入时,我都可以从此表中读取数据,并为新的序列号加 1。

那么我如何最好地实现这个在 Java/MySql/Mybatis/Spring 中也是唯一的序列生成呢?

最佳答案

我将使用触发器创建自己的排序实现。我对mysql不是很熟悉。因此,将我的示例视为伪代码。您的触发器如下所示:

  1. 创建一个不带自动增量的表。示例:
CREATE TABLE EMPLOYEE (
ID CHAR(30), NAME CHAR(30)
)
  • 使用自动递增列的逻辑创建触发器。类似于:
  • CREATE TRIGGER EMPLOYEE_SEQUENCE BEFORE INSERT ON EMPLOYEE
    FOR EACH ROW
    BEGIN
    SET @PREPENDED_ZEROS = '';
    SET @ID_AS_NUMBER = CAST(SUBSTRING(ID,3) AS INT) + 1;
    IF @ID_AS_NUMBER < 10 THEN
    SET @PREPENDED_ZEROS = '00';
    ELSEIF @ID_AS_NUMBER < 100 THEN
    SET @PREPENDED_ZEROS = '0';
    END IF;
    SET NEW.ID = 'EMP_' || @PREPENDED_ZEROS || @ID_AS_NUMBER;
    END;

    关于mysql - 如何在java中生成唯一的序列号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35765628/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com