MySQL模擬Oracle序列sequence

2021-08-11 14:14:47 字數 1412 閱讀 3869

沒發現,這麼多同學有這個需求,把文件補充一下,其實就是建立1個表,和2個儲存過程。利用表的行級鎖模擬每乙個表的序列增減。

drop table if exists sys_sequence ;

create table sys_sequence (

seq_name varchar (50) not null,

curr_value bigint not null default 0,

increment_by int not null default 1,

primary key (seq_name)

) engine = innodb ;

insert into sys_sequence values ('seq_test_no',10000,1);

delimiter $$

drop function if exists currval $$

create

/*[definer = ]*/

function currval(v_seq_name varchar (50))

returns bigint

/*language sql

| [not] deterministic

| | sql security

| comment 'string'*/

begin

declare v_currval bigint;

set v_currval = 1 ;

select

curr_value into v_currval

from

sys_sequence

where seq_name = v_seq_name ;

return v_currval ;

end$$

delimiter ;

-- select `currval`('seq_test_no');

delimiter $$

drop function if exists `nextval` $$

create function `nextval` (`v_seq_name` varchar (50)) returns bigint (20) contains sql

begin

update

sys_sequence

set`curr_value` = last_insert_id(`curr_value` + `increment_by`)

where `seq_name` = v_seq_name ;

return last_insert_id();

end $$

delimiter ;

測試就比較簡單了

select nextval('aaaa') from dual;

MySQL函式模擬Oracle序列

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

MySQL模擬Oracle序列使用

一篇筆記開始看 注意 建立序列表時一定要有 主鍵id自增,否則為唯讀狀態不能修改遞增。序列名欄位名都更改一下即可 drop table if exists sequence create table sequence id int unsigned not null auto increment,n...

oracle序列和mysql序列

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