mysql 自定義 sequence 儲存過程

2021-08-30 12:07:31 字數 2382 閱讀 2060

mysql本身是沒有sequence的但是我可以自己建立sequence儲存過程.

首先我們先建立相關的表,和儲存過程.

第一步是建立規則表.

drop table if exists `seq`;

create table `seq` (

`id` bigint(11) not null auto_increment,

`name` varchar(255) not null comment 'sequence名稱',

`max` bigint(11) not null default '1' comment '最大id',

`length`int(2) not null default '1' comment '生成序列後的長度,以0補全',

`next` int(2) not null default '1' comment '增長的長度',

`rules` varchar(255) default null comment '規則以###max_id###做為替換',

primary key (`id`),

unique key `fk_name` (`name`)

) engine=innodb auto_increment=1 default charset=utf8;

第二步是建立sequence方法.計算方法.

drop function if exists bj;

delimiter $

create function bj (seq_name varchar(50))

returns varchar(20)

contains sql

begin

declare seq_rules varchar(255);

declare seq_length int(2);

declare seq_max bigint(20);

declare max_id_length int(20);

declare max_id varchar(20);

select rules,seq.`length`,`max` into seq_rules, seq_length,seq_max from seq where name = seq_name ;

set max_id = seq_max;

set max_id_length = character_length(max_id);

#長度不夠補0

while seq_length > max_id_length do

set max_id = concat('0',max_id);

set max_id_length = character_length(max_id);

end while;

#替換規則

if seq_rules is not null and instr(seq_rules,'###max_id###') > 0 then

set max_id = replace(seq_rules,'###max_id###',max_id);

end if;

return max_id;

end$

delimiter ;

第三步是建立sequence方法.呼叫方法.

drop function if exists nextval;

delimiter $

create function nextval (seq_name varchar(50))

returns varchar(20)

contains sql

begin

update seq set `max` = `max` + next where name = seq_name;

return bj(seq_name);

end$

delimiter ;

好上邊沒問題了 我們建立幾條測試資料看看。

#純數字序列

insert into `seq` (`name`,`max`,`length`,`next`,`rules`) values ('seq_test1', '0', '1', '1', null );

#帶有規則序列

insert into `seq` (`name`,`max`,`length`,`next`,`rules`) values ('seq_test2', '0', '3', '2','seq###max_id###');

select nextval('seq_test1');

select nextval('seq_test2');

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

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

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

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

mysql 自定義函式

今天要做乙個排序,有中文和英文的,資料庫採用utf8編碼,排除來的不對,所以需要將中文轉換成中文的第乙個字母,然後來排序 先小小的看一下mysql的自定義函式 drop function if exists fntable 如果存在就刪除 delimiter 函式開始 create function...