方案1:
SEQ_KEY INT NOT NULL COMMENT 'key',
UPTIME datetime DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',
NAME VARCHAR(32) COMMENT '名称',
VALUE BIGINT DEFAULT 1 COMMENT '序列值',
STEP BIGINT DEFAULT 1 COMMENT '步长',
-- 注:本方案存在并发问题,@val1非原子性,可能返回重复值)
CREATE FUNCTION F_NEXTVAL (seqKey int, seqName varchar(32))
UPDATE TEST.TB_SEQ SET VALUE = (@val1 := VALUE + STEP) WHERE SEQ_KEY = seqKey;
DROP PROCEDURE P_NEXTVAL;
CREATE PROCEDURE P_NEXTVAL(seqKey int, seqName varchar(32))
DECLARE val1 bigint default -1;
UPDATE TEST.TB_SEQ SET VALUE = VALUE + STEP WHERE SEQ_KEY = seqKey;
SELECT VALUE INTO val1 FROM TEST.TB_SEQ WHERE SEQ_KEY = seqKey;
-- 方式2延伸(java代码控制事务 mybatis):
-- 注:本方案事务保障并发,无重复, 切忌执行当前sql,需要开启单独事务并提交
UPDATE TEST.TB_SEQ SET VALUE = VALUE + STEP WHERE SEQ_KEY = seqKey;
<selectKey order="AFTER" keyProperty="value" keyColumn="VALUE" resultType="Long">
SELECT VALUE INTO val1 FROM TEST.TB_SEQ WHERE SEQ_KEY = seqKey;

方案2:
SEQ_KEY INT NOT NULL AUTO_INCREMENT COMMENT 'key',
insert into TB_SEQ values();