dual mysql 獲取序列 MySQL

2021-10-13 08:19:08 字數 3208 閱讀 3699

1,建立乙個序列列兵生成序列值使用auto_increment 如果顯式地把id設定成乙個非null的值,有兩個結果:a,這個值在表**現,由於id列是主鍵,因而不允許重複,故會出現錯誤b,這個值沒有出現...

mysql實現類似oracle的序列 oracle一般使用序列(sequence)來處理主鍵字段,而mysql則提供了自增長(increment)來實現類的目的; 但在實際使用過程中發現,mysql的自增長有諸多的弊端:不能控制步長、開始索引、是否迴圈等;若需要遷移資料庫,則對於主鍵這塊,

mysql實現類似oracle的序列

oracle一般使用序列(sequence)來處理主鍵字段,而mysql則提供了自增長(increment)來實現類似的目的;

但在實際使用過程中發現,mysql的自增長有諸多的弊端:不能控制步長、開始索引、是否迴圈等;若需要遷移資料庫,則對於主鍵這塊,也是個頭大的問題。

本文記錄了乙個模擬oracle序列的方案,重點是想法,**其次。

oracle序列的使用,無非是使用.nextval和.currval偽列,基本想法是:1、mysql中新建表,用於儲存序列名稱和值;2、建立函式,用於獲取序列表中的值;

具體如下:

表結構為

表結構為:

drop table if exists sequence;

create table sequence (

seq_namevarchar(50)not null, -- 序列名稱

current_valintnot null, --當前值

increment_valintnot nulldefault 1, --步長(跨度)

primary key (seq_name)

實現currval的模擬方案

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;

函式使用為:select currval('movieseq');

實現nextval的模擬方案

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;

函式使用為:select nextval('movieseq');

增加設定值的函式

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);

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

以上**未經測試,僅僅是想表達乙個想法而已。

ps:在網上看到另外兩人的博文,表達了同樣的意思,將連線貼出來,供大家比較。

1,建立乙個序列列兵生成序列值使用auto_increment 如果顯式地把id設定成乙個非null的值,有兩個結果:a,這個值在表**現,由於id列是主鍵,因而不允許重複,故會出現錯誤b,這個值沒有出現...

mysql實現序列效果

一般使用序列(sequence)來處理主鍵字段,在mysql中是沒有序列的,但是mysql有提供了自增長(increment)來實現類似的目的,但也只是自增,而不能設定步長、開始索引、是否迴圈等,最重要...

mysql 序列使用mysql序列是一組整數:1, 2, 3, ...,由於一張資料表只能有乙個欄位自增主鍵, 如果你想實現其他欄位也實現自動增加,就可以使用mysql序列來實現。本章我們將介紹如何使用mysql的序列。使用auto_in...

.../p>1. mysql分組排序取前n條記錄 以及 生成自動數字序列 的sql簡介:-- mysql分組排序取前n條記錄的最簡潔的單條sql。2. mysql分組排序取前n條記錄 以及 生成自動數目字序列 的sq...

序列是一組整數1,2,3,...中生成的順序。序列中經常使用的資料庫,因為很多應用都需要乙個表中的每一行包含乙個獨特的值和序列提供了乙個簡單的方法來產生。本章介紹如何使用mysql中的序列。

使用自動遞增列...

mysql欄位自增和oracle的sequence序列自增的比較 mysql欄位自增和oracle的sequence序列自增的比較? 一、請問在 oracleh和postgresql為什麼不用mysql那種欄位自增方式,對應而已序列自增有什麼優勢? 二、請具體舉例說明有哪幾個方面的...

mysql實現類似oracle的序列 oracle一般使用序列(sequence)來處理主鍵字段,而mysql則提供了自增長(increment)來實現類的目的; 但在實際使用過程中發現,mysql的自增長有諸多的弊端:不能控制步長、開始索引、是否迴圈等;若需要遷...

bitscn.com

mysql實現類似oracle的序列 oracle一般使用序列(sequence)來處理主鍵字段,而mysql則提供了自增長(increment)來實現類似的目的;但在實際使用過程中發現,mysql的自增長有諸多的弊端:不能控制步長、開始索...

...入到乙個auto_increment資料列裡去,mysql將自動生成下乙個序列編號。編號從1開始,並1為基數遞增。把0插入auto_increment資料列的效果與插入null值一樣。但不建議這樣做,還是以插入null值為好。當插入記錄時,沒有為auto_...

oracle和mysql分別生成sequence序列 有時候在往資料庫中插入資料的時候,如果id值是32位的uuid, 而自己隨便寫個字元又不合適,這時就要用到函式來產生乙個序列值 oracle: select sys_guid() from dual; mysql: select replace(

Mysql獲取序列值

select identity string sql select identity identity是表示的是最近一次向具有identity屬性 即自增列 的表插入資料時對應的自增列的值,是系統定義的全域性變數。一般系統定義的全域性變數都是以 開頭,使用者自定義變數以 開頭。比如有個表a,它的自增...

獲取硬碟序列號(VC)

說明 經過上百臺計算機測試,ide和sata硬碟可以獲取序列號 scsi硬碟沒有測試環境,無法測試成功與否。請有條件的朋友幫忙測試下,給個訊息,謝謝。虛擬機器上測試不了,不用測試了。ide測試出來全部是0000等數字。網路流傳的版本不少,下下來測試修改了下。include include inclu...

獲取硬碟物理序列號

獲取硬碟物理序列號 最近才做完了這個獲取 ide 硬碟物理序列號的程式。宣告一下,這個程式是我根據 lynn mcguire 的那個 diskid32 的源 做了些自以為是的改動得到的,只能在 nt 平台下獲得第一塊 ide 硬碟的物理序列號。同時,這個程式用到了不少未公開的 windows 的結構...