我需要创建一个实体表单,它在数据库中有唯一的标识列,而不是主键列,我需要在表单创建页面中显示它。我已将此列设置为UNIQUE而非null。现在每当我创建一个新用户,员工或任何实体时,我需要生成一个序列号,如此格式,并在表单中显示,
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
?
答案 0 :(得分:1)
我会使用触发器创建自己的测序实现。我对mysql不太熟悉。所以,把我的例子作为伪代码。你的触发器看起来像:
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;