MySQL 實現自增函式sequence

2022-02-03 23:54:13 字數 2621 閱讀 1277

當前資料庫為:mysql

由於mysql和oracle不太一樣,不支援直接的sequence,所以需要建立一張table來模擬sequence的功能,理由sql語句如下:

create

table

`sequence` (

`name`

varchar(50) collate utf8_bin not

null comment '

序列的名字',

`current_value`

int(11) not

null comment '

序列的當前值',

`increment`

int(11) not

null

default'1

' comment '

序列的自增值',

primary

key(`name`)

) engine

=innodb default charset=utf8 collate=utf8_bin;

drop

function

ifexists

currval;

delimiter $

create

function currval (seq_name varchar(50

))

returns

integer

language sql

deterministic

contains

sql

sql security definer

comment

''begin

declare value integer

;

set value =0;

select current_value into

value

from

sequence

where name =

seq_name;

return

value;

end$

delimiter ;

drop

function

ifexists

nextval;

delimiter $

create

function nextval (seq_name varchar(50

))

returns

integer

language sql

deterministic

contains

sql

sql security definer

comment

''begin

update

sequence

set current_value = current_value +

increment

where name =

seq_name;

return

currval(seq_name);

end$

delimiter ;

drop

function

ifexists

setval;

delimiter $

create

function setval (seq_name varchar(50), value integer

)

returns

integer

language sql

deterministic

contains

sql

sql security definer

comment

''begin

update

sequence

set current_value =

value

where name =

seq_name;

return

currval(seq_name);

end$

delimiter ;

insert

into sequence values ('

testseq

', 0, 1);--

新增乙個sequence名稱和初始值,以及自增幅度

select setval('

testseq

', 10);--

設定指定sequence的初始值

select currval('

testseq

');--

查詢指定sequence的當前值

select nextval('

testseq

');--

查詢指定sequence的下乙個值

mysql實現自增函式

這兩天在思考怎麼生成資料庫隨機名稱,思前想後覺得還是利用自增的邏輯主鍵是最方便快捷的,於是便嘗試著獲取一種自增的mysql函式 自增mysql函式 1 begin 2 declare id int default 0 3 select cuid 1 into id from uc gen numbe...

ORACLE自增函式,一般函式

1.oracle先建立函式方法,再直接使用,mysql直接使用方法unix timestamp,from unixtime oracle to unix create date create orreplace function oracle to unix in date in date retu...

資料庫表的某列的自定義自增函式(mysql)

1 在該列上建立唯一值約束 表名 約束名 列名,都不帶引號 alter table 表名 add constraint 約束名 unique 列名 2 根據字段值要求 比如 年份後兩位 兩位月份 兩位天 當天的第幾條記錄 5位數,不足在左側補零 寫乙個自增函式。dbname01 資料庫名 gener...