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...