當前資料庫為:mysql
由於mysql和oracle不太一樣,不支援直接的sequence,所以需要建立一張table來模擬sequence的功能,理由sql語句如下:
createtable
`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;
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 ;
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 ;
insertinto 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...