MySQL的sequence解決方案

2021-06-26 08:25:04 字數 1522 閱讀 5685

由於mysql不支援sequence,所以從oracle遷移時需要採用自定義sequence的方式來解決。

createtable

seqmysql (

seqname

varchar(50),

`currentvalue`

int(

11),

increment

int(11) default1

)create definer=`mysql`@`%` function `currval`(seq_name

varchar(50

)) returns

int(11)

begin

declare current integer;

set current = 0;

select

currentvalue

into current

from seqmysql

where

seqname = seq_name;

return current;

endcreate definer=`mysql`@`%` function `nextval`(seq_name

varchar(50

)) returns

int(11)

begin

update seqmysql

setcurrentvalue= currentvalue+ increment

where

seqname = seq_name;

return

currval(seq_name);

endcreate definer=`mysql`@`%` function `setval`(seq_name

varchar(50

), value

integer

) returns

int(11)

begin

update seqmysql

setcurrentvalue = value

where

seqname = seq_name;

return

currval(seq_name);

end使用如下方式使用mysql的序列:

--建立乙個序列,起始為1,步長為1

insert

into

seqmysql

values

('my_seq', 1, 1);

--從序列中取出下乙個值

select

nextval

('my_seq')

from dual;

--從序列中取出當前值

select

currval

('my_seq')

from

dual;

--設定序列當前值

select

setval

('my_seq', 5)

from

dual;

mysql實現sequence自增長

1建立表 create table tb sequence seq name varchar 50 not null comment 欄位名稱 min int 11 not null comment 最小值 max int 11 not null comment 最大值 current val in...

MySQL 之自己實現sequence

oracle的sequence是乙個很好的主鍵生成策略,但是mysql並不具有sequence語法,下面在mysql中來模擬實現乙個sequence。1 建一張表e sys sequence用來記錄序列名稱和值 drop table ifexists e sys sequence create ta...

MySQL實現序列(Sequence)效果

mysql實現序列效果 一般使用序列 sequence 來處理主鍵字段,在mysql中是沒有序列的,但是mysql有提供了自增長 increment 來實現類似的目的,但也只是自增,而不能設定步長 開始索引 是否迴圈等,最重要的是一張表只能由乙個字段使用自增,但有的時候我們需要兩個或兩個以上的字段實...