mysql實現自定義sequence自增序列

2021-10-21 01:13:23 字數 2281 閱讀 8603

mysql資料庫沒有oracle資料庫中sequence序列,mysql中只有auto_increment自增,這種自增方式只能是整數型別的,如果要自定義的自增序列,mysql就不能實現。

這裡,提供mysql實現自定義sequence自增序列的一種方法。

drop table if exists sequence;

-- 建立序列表

create table if not exists sequence (

sequence_name varchar(50) primary key comment '序列名稱',

current_value int not null comment '序列當前值',

increment int not null default '1' comment '序列步長',

sequence_date varchar(10) not null comment '日期'

) comment '序列表';

drop function if exists currval;

delimiter $$

create function currval(seq_name varchar(50))

returns integer

begin

declare cur_value integer default 0;

-- 查詢是否存在當前序列

select count(1) into cur_value from sequence

where sequence_name = seq_name

and sequence_date = date_format(sysdate(),'%y%m%d');

if cur_value <> 0 then

-- 存在則返回當前序列值

select current_value into cur_value from sequence

where sequence_name = seq_name

and sequence_date = date_format(sysdate(),'%y%m%d');

else

-- 刪除不是當天的序列

delete from sequence where sequence_name = seq_name;

-- 不存在,則插入當前序列值

insert into sequence(sequence_name, current_value, increment, sequence_date)

values(seq_name, 0, 1, date_format(sysdate(),'%y%m%d'));

end if;

return cur_value;

end $$;

drop function if exists nextval;

delimiter $$

create function nextval(seq_name varchar(50))

returns varchar(32)

begin

declare curval integer;

-- 獲取當前序列值

set curval = currval(seq_name);

-- 更新序列表

update sequence set current_value = current_value + increment

where sequence_name = seq_name

and sequence_date = date_format(sysdate(),'%y%m%d');

-- 返回序列,格式:***x+20210220+8位長度序列(不足左補0)

return concat(seq_name, date_format(sysdate(), '%y%m%d'),lpad(curval,8,0));

end $$;

select nextval('test');

select nextval('test');

select nextval('test');

執行結果如下(每呼叫nextval方法一次,就會返回乙個序列):

以上就是乙個自定義自增序列的實現方式。

mysql自定義函式優點 MySQL自定義函式

在使用 mysql 的過程中,mysql 自帶的函式可能完成不了我們的業務需求,這時候就需要自定義函式。自定義函式是一種與儲存過程十分相似的過程式資料庫物件。它與儲存過程一樣,都是由 sql 語句和過程式語句組成的 片段,並且可以被應用程式和其他 sql 語句呼叫。自定義函式與儲存過程之間存在幾點區...

mysql自定義函式命名 MySQL自定義函式

在使用 mysql 的過程中,mysql 自帶的函式可能完成不了我們的業務需求,這時候就需要自定義函式。自定義函式是一種與儲存過程十分相似的過程式資料庫物件。它與儲存過程一樣,都是由 sql 語句和過程式語句組成的 片段,並且可以被應用程式和其他 sql 語句呼叫。自定義函式與儲存過程之間存在幾點區...

Mysql自定義Sequence 實現序列自增功能

create table sequence name varchar 50 collate utf8 bin not null comment 序列的名字 current value int 11 notnull comment 序列的當前值 increment int 11 notnull def...