MySQL/Sequence
< MySQL
MySQL中没有实现序列,但MySQL提供了自增(increment)字段。自增不能设置步长、开始索引、是否循环等;一张表只能有一个自增字段,有时需要单表多字段分别自增。为此,模仿Oracle实现自增:
新建序列表作为元数据:
drop table if exists sequence;
create table sequence (
seq_name VARCHAR(50) NOT NULL, -- 序列名称
current_val INT NOT NULL, -- 当前值
increment_val INT NOT NULL DEFAULT 1, -- 步长(跨度)
PRIMARY KEY (seq_name));
新增一个序列的定义:
INSERT INTO sequence VALUES ('seq_test', '0', '1');
创建currval函数,用于获取给定序列的当前值:
delimiter //
create function currval(v_seq_name VARCHAR(50))
returns integer(11)
begin
declare value integer;
set value = 0;
select current_val into value from sequence where seq_name = v_seq_name;
return value;
end;
//
delimiter ;
创建nextval函数,用于获取给定序列的下一个新值:
create function nextval (v_seq_name VARCHAR(50)) returns integer(11)
begin
update sequence set current_val = current_val + increment_val where seq_name = v_seq_name;
return currval(v_seq_name);
end;