MySQL实现自增的序列(Sequence)

1、Mysql不支持直接的Sequence,首先需要创建一张表来模拟Sequence的功能。

CREATE TABLE t_sequence(
seq_name varchar(100) NOT NULL COMMENT '主键',
table_name varchar(100) NOT NULL COMMENT '表名标识该序列是某张表的',
column_name varchar(200) NOT NULL COMMENT '列名标识该序列用于某个字段',
current_val int(15) NOT NULL COMMENT '当前值',
increment_val int(5) NOT NULL DEFAULT '1' COMMENT '跨度',
valid_flag varchar(1) NOT NULL DEFAULT 'Y' COMMENT 'Y有效N无效',
create_by varchar(100) NOT NULL DEFAULT 'admin' COMMENT '创建人',
create_date datetime NOT NULL COMMENT '创建时间',
update_by varchar(100) NOT NULL DEFAULT 'admin' COMMENT '修改人',
update_date datetime NOT NULL COMMENT '修改时间',
PRIMARY KEY (`seq_name`)
) COMMENT='序列表';

2、创建一个取当前值的函数

CREATE FUNCTION fun_currval(v_seq_name varchar(100)) RETURNS int(15)
    COMMENT '用于获取序列表中的值'
begin      
  declare 
  value int(15);       
  set value = 0;      
  select current_val into value from t_sequence where seq_name=v_seq_name;       
  return value;   
end;

3、创建一个取下一个值的函数

CREATE  FUNCTION fun_nextval(v_seq_name varchar(100),update_by varchar(100)) RETURNS int(15)
    COMMENT '用于获取序列表中的值'
begin    
  update t_sequence set current_val=current_val+increment_val,update_date=now(),update_by=update_by where seq_name=v_seq_name;     
  return fun_currval(v_seq_name);   
end;

4、测试函数的功能
例如:给t_user表的主键user_id增加一个序列seq_user_id,从0开始,每次自增1。

--插入一条配置语句
INSERT INTO t_sequence VALUES ('seq_user_id', 't_user', 'user_id', '1', '1', 'Y', 'admin', now(), 'admin', now());
--获取序列下一值。(这里第二个参数实际中可忽略。建表时可删掉该字段。本人主要是考虑执行update语句时一定要有update_by)。然后在Java代码中直接调用执行这一段sql即可得到序列值。
select fun_nextval('seq_user_id','admin') 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值