MySQL實作類別似Oracle的序列

來源:互聯網
上載者:User

標籤:style   http   io   ar   color   使用   sp   on   資料   

MySQL實作類別似Oracle的序列
2013-10-22 10:33:35     我來說兩句       走過的足跡
收藏    我要投稿
MySQL實作類別似Oracle的序列 Oracle一般使用序列(Sequence)來處理主鍵欄位,而MySQL則提供了自增長(increment)來實作類別似的目的;但在實際使用過程中發現,MySQL的自增長有諸多的弊端:不能控制步長、開始索引、是否迴圈等;若需要遷移資料庫,則對於主鍵這塊,也是個頭大的問題。本文記錄了一個類比Oracle序列的方案,重點是想法,代碼其次。Oracle序列的使用,無非是使用.nextval和.currval偽列,基本想法是:1、MySQL中建立表,用於儲存序列名稱和值;2、建立函數,用於擷取序列表中的值;具體如下:表結構為  [sql] 表結構為:  ?
1234567 drop table if exists sequence;   create table sequence (       seq_name        VARCHAR(50) NOT NULL, -- 序列名稱       current_val     INT         NOT NULL, --當前值       increment_val   INT         NOT NULL    DEFAULT 1, --步長(跨度)       PRIMARY KEY (seq_name)   );

 

實現currval的類比方案 ?
1234567891011 [sql]  create function currval(v_seq_name VARCHAR(50))   returns integer  begin      declare value integer;       set value = 0;       select current_value into value       from sequence      where seq_name = v_seq_name;       return value;   end;

 

[sql] 函數使用為:select currval(‘MovieSeq‘);    實現nextval的類比方案?
123456789 [sql]  create function nextval (v_seq_name VARCHAR(50))   return integer  begin    update sequence    set current_val = current_val + increment_val     where seq_name = v_seq_name;     return currval(v_seq_name);   end;

 

[sql] 函數使用為:select nextval(‘MovieSeq‘);   增加設定值的函數 ?
12345678 [sql]  create function setval(v_seq_name VARCHAR(50), v_new_val INTEGER)   returns integer  begin    update sequence    set current_val = v_new_val     where seq_name = v_seq_name;   return currval(seq_name);

 

 同理,可以增加對步長操作的函數,在此不再敘述。

MySQL實作類別似Oracle的序列

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.