oracle的sequence是乙個很好的主鍵生成策略,但是mysql並不具有sequence語法,下面在mysql中來模擬實現乙個sequence。
1、建一張表e_sys_sequence
用來記錄序列名稱和值
drop
table
ifexists e_sys_sequence;
create
table
e_sys_sequence
( name varchar(64
)not
null
, current_value bigint
notnull
, increment int
notnull
default1,
primary
key(name)
)engine
=innodb
default
charset
=utf8mb4 row_format=dynamic comment
='通用序列表'
;
2、建立取當前值的函式e_sys_sequence.currval
drop
function
ifexists
`e_sys_sequence.currval`
;delimiter $
create
function
`e_sys_sequence.currval`
(seq_name varchar(50
))returns
integer
begin
declare
value
integer
;set
value=0
;select current_value into
value
from e_sys_sequence where name = seq_name;
return
value
;end
$ delimiter
;
3、建立取下乙個值的函式e_sys_sequence.nextval
drop
function
ifexists
`e_sys_sequence.nextval`
;delimiter $$
create
function
`e_sys_sequence.nextval`
(seq_name char(64
))returns
bigint
begin
update e_sys_sequence set current_value=last_insert_id(current_value+increment)
where name=seq_name;
return last_insert_id();
end $$
delimiter
;
4、建立更新當前值的函式e_sys_sequence.setval
drop
function
ifexists
`e_sys_sequence.setval`
;delimiter $
create
function
`e_sys_sequence.setval`
(seq_name varchar(50
),value
integer
)returns
integer
begin
update e_sys_sequence set current_value =
value
where name = seq_name;
return
`e_sys_sequence.currval`
(seq_name)
;end
$ delimiter
;
測試:
--新增乙個sequence名稱和初始值,以及自增幅度 新增乙個名為testseq的自增序列
insert
into e_sys_sequence values
('testseq',0
,1);
--查詢指定sequence的下乙個值,這裡是獲取testseq下乙個值
select
`e_sys_sequence.nextval`
('testseq');
--查詢指定sequence的當前值,這裡是獲取testseq當前值
select
`e_sys_sequence.currval`
('testseq');
---更新指定sequence的初始值,這裡更新testseq的值為10
select
`e_sys_sequence.setval`
('testseq',10
);
MySQL模擬Oracle序列sequence
沒發現,這麼多同學有這個需求,把文件補充一下,其實就是建立1個表,和2個儲存過程。利用表的行級鎖模擬每乙個表的序列增減。drop table if exists sys sequence create table sys sequence seq name varchar 50 not null,c...
MPI之自己實現Alltoall 函式
mpi alltoall是組內程序之間完全的訊息交換,其中每乙個程序都向其它所有的程序傳送訊息,同時,每乙個程序都從其它所有的程序接收訊息。本質上,它實現的效果就是矩陣的轉置。如果不呼叫系統的mpi alltoall 函式,只用sendrecv send 或recv 該如何實現呢?事實上,只要明白a...
MySQL之索引樹實現
本文章 於 請star 強力支援,你的支援,就是我的動力。toc 為什麼mysql的innodb中的索引要使用b 樹,而不是其它樹?比如b樹?innodb的一棵b 樹可以存放多少行資料?答案 約2千萬 怎麼計算出來的?先從innodb索引資料結構 資料組織 索引實現方式說起。計算機在儲存資料的時候,...