用mysql實現oracle sequence功能

2021-06-07 19:58:14 字數 2835 閱讀 4328

由於mysq只有遞增列的概念沒有oracle的sequence功能,這樣對於以前習慣用oracle資料庫開發的程式設計師不太實用,尤其在要使用nextval在獲取增長序列的時候。這樣就設計乙個能模擬oracle sequence的功能。

思路:我們可以用一張表來記錄sequence資料,其實在使用oracle sequence的時候也類似是一張表,currentval、nextval和增長係數就類似表中的字段。而currentval、nextval我們可以設計成兩個function這樣在呼叫的時候返回currentval、nextval的值。

設計表seqmsql:

create table seqmysql 

( seqname varchar(50) not null, --sequence名稱

currentvalue int not null, --當前sequence值

increment int not null default 1, --增長係數

primary key (seqname)

) engine=innodb;

例項:插入乙個sequence資料

insert into seqmysql values ('browserseq',10002,1);
查詢:

+------------+--------------+-----------+

| seqname | currentvalue | increment |

+------------+--------------+-----------+

| browserseq | 10002 | 1 |

+------------+--------------+-----------+

1 row in set

獲取當前值function:

delimiter $ 

create function currval (seq_name varchar(50))

returns integer

contains sql

begin

declare current integer;

set current = 0;

select currentvalue into current

from seqmysql

where seqname = seq_name;

return current;

end$

delimiter ;

查詢:

mysql> select currval('browserseq');

+--------------------+

| currval('browserseq')|

+--------------------+

| 10002 |

+--------------------+

1 row in set

delimiter $  

create function nextval (seq_name varchar(50))

returns integer

contains sql

begin

update seqmysql

set currentvalue = currentvalue + increment

where seqname = seq_name;

return currval(seq_name);

end$

delimiter ;

查詢:

mysql> select nextval('browserseq');

+-----------------------+

| nextval('browserseq') |

+-----------------------+

| 10003 |

+-----------------------+

1 row in set

設定增長係數function:

delimiter $  

create function setval (seq_name varchar(50), value integer)

returns integer

contains sql

begin

update seqmysql

set currentvalue = value

where seqname = seq_name;

return currval(seq_name);

end$

delimiter ;

用mysql實現rank()排序

mysql中不存在類似於sql server或orcal中的rank 函式來得到排名。而在實際的工作中,常常需要將查詢後排序得到的排名給記錄下來。由於專案需要,不僅要對成績進行排名,而且需要相同成績的具有相同的排名。根據網上的提供的排名方法,進一步進行擴充,得到了下面的實現方式。表 score,有三...

mysql 排名 MySQL用變數實現排名

mysql 8.0版本用視窗函式就可以實現排名,有三種方式,對相同值的處理不同 以上區別會在文末舉例,本文主要討論用變數實現排名 5.5版本用不了視窗函式 至少排序視窗用不了,其他的沒試過 那麼對於要顯示排名的需求就得想其他辦法啦,看網上的資料可以用變數來實現,來看看 首先建表並插入資料 資料資料來...

用函式實現mysql和sqlserver的樹查詢

幹活的時候 遇到要用sql語句做樹查詢 mysql和sqlserver 這些思路都是我看其他兄弟姐妹的.能用但可能寫得不怎麼好 函式返回的都是以逗號分隔開的id字串 mysql 查詢當前節點和他的祖先節點 create definer root function org getparents chi...