MySQL模擬Oracle序列使用

2022-08-24 06:18:15 字數 3167 閱讀 6880

一篇筆記開始看

注意:建立序列表時一定要有 主鍵id自增,否則為唯讀狀態不能修改遞增。 序列名欄位名都更改一下即可

drop table if exists sequence; 

create table sequence (

id int unsigned not null auto_increment,

name varchar(50) not null,

current_value int not null,

increment int not null default 1, 

primary key (name)

) engine=innodb;

通過以下語句獲取使用

select concat('no',lpad(nextval('column'),6,'0'))

nextval() 自定義函式,取得下乙個值, lpad()填充函式,concat()拼接函式, 得到結果如  no000001 

例項:使用函式建立自增序列管理表(批量使用自增表,設定初始值,自增幅度)

第一步:建立sequence管理表 sequence

drop

table

ifexists

sequence;

create

table

sequence (

id int unsigned not null auto_increment,

name

varchar(50) not

null

, current_value

intnot

null

, increment

intnot

null

default1,

primary

key(name)

) engine

=innodb;

第二步:建立取當前值的函式 currval

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;

第四步:建立更新當前值的函式 setval

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 ;

測試函式功能

當上述四步完成後,可以用以下資料設定需要建立的sequence名稱以及設定初始值和獲取當前值和下乙個值。

insert

into sequence values ('

testseq

', 0, 1

);--

--新增乙個sequence名稱和初始值,以及自增幅度 新增乙個名為testseq 的自增序列

select setval('

testseq

', 10

);--

-設定指定sequence的初始值 這裡設定testseq 的初始值為10

select currval('

testseq

');

--查詢指定sequence的當前值 這裡是獲取testseq當前值

select nextval('

testseq

');

--查詢指定sequence的下乙個值 這裡是獲取testseq下乙個值

MySQL模擬Oracle序列sequence

沒發現,這麼多同學有這個需求,把文件補充一下,其實就是建立1個表,和2個儲存過程。利用表的行級鎖模擬每乙個表的序列增減。drop table if exists sys sequence create table sys sequence seq name varchar 50 not null,c...

MySQL函式模擬Oracle序列

oracle資料庫遷移到mysql的過程中,需要解決mysql中沒有oracle的序列功能,本人的解決方案是通過一張表用來記錄oracle中序列的名稱 當前序列的值及每次步進長度,通過倆個函式來模擬序列自增,具體 如下 建表語句.create table sys sequence seq name ...

oracle序列和mysql序列

1.什麼是序列?序列 可供多個使用者用來產生唯一數值的資料庫物件 2.為什麼用序列?自動提供唯一的數值 共享物件 主要用於提供主鍵值 將序列值裝入記憶體可以提高訪問效率 3.怎麼用序列?重點 oracle序列和mysql序列 oracle序列 建立create sequence dept depti...