由於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...