一篇筆記開始看
注意:建立序列表時一定要有 主鍵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
droptable
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
dropfunction
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 ;
dropfunction
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
dropfunction
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名稱以及設定初始值和獲取當前值和下乙個值。
insertinto 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...