如何使Mysql自動生成序號列,序號自動增長問題
Mysql自動生成序號列,序號自動增長
在Oracle中有ROWNUM 這個功能,可以很方便的得到序列號。
但是Mysql中始終沒有實現(xiàn)這個功能的函數(shù),那當(dāng)我們需要的時候該怎么處理呢?
使用Msyql的自定義變量
1.自定義變量放在FROM后面
使用 @var 定義變量 ,這個變量定義是基于connection的。
也就是當(dāng)連接斷開重連的時候,@var中的值會被清空,因此我們最好每次都給它一個初始值。
SELECT @i:=@i+1 AS '序號' , a.name FROM AREA a,(SELECT @i:=5) i?
變量 @i :
- 在SELECT 得到每一行結(jié)果集都會先自增1 ;
- 在FROM 后面的(SELECT @i:=5) 每次sql執(zhí)行都會初始化變量@i的值為5 。
2.自定義變量放在WHERE后面
其實這個變量的初始化值并不一定非要放在FROM后面,也可以像下面這樣。
這是由于 sql的執(zhí)行順序決定的,在select 執(zhí)行前 初始化變量即可 。
SELECT @a:=@a+1 AS '序號' , a.name FROM AREA a WHERE (SELECT @a:=5)
區(qū)別
在 WHERE 后面使用變量的時候, 不能初始化賦值0(WHERE (SELECT @a:=0)) ,這個是因為0在 WHERE 后面被認為是 false 。這樣不能搜索到任何結(jié)果。
Mysql存儲過程生成編號自增
例如
編號1,2,3,4,5…n依次遞增1
CREATE PROCEDURE khbh1(out khbh varchar(255)) begin DECLARE n int; declare lsh int; – 查詢系統(tǒng)流水表中有多少條數(shù)據(jù) select count(*) into n from SKT176; – 如果為0,把1賦值給流水號,再將系統(tǒng)編號插入進系統(tǒng)流水表中。否則查詢系統(tǒng)流水表中最大的起始編號,依次往上+1 IF n=0 then set lsh =1; insert into 系統(tǒng)流水表(起始編號) values(lsh); else select Max(起始編號) INTO lsh from 系統(tǒng)流水表; SET lsh=lsh+1; update 系統(tǒng)流水表 SET 起始編號=lsh where id=1; end if; – 輸出編號1,2,3,4,5,6… set khbh=lsh; end;
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
MySQL 中 DATE_FORMAT() 函數(shù)的使用及應(yīng)用場景
DATE_FORMAT() 是 MySQL 中的一個內(nèi)置函數(shù),用于格式化日期和時間數(shù)據(jù),它可以根據(jù)指定的格式字符串來展示日期和時間,使得數(shù)據(jù)更容易閱讀和理解,本文檔將詳細介紹 DATE_FORMAT() 函數(shù)的使用方法及其常見應(yīng)用場景,感興趣的朋友一起看看吧2024-12-12Mysql的SELECT語句與顯示表結(jié)構(gòu)詳解
這篇文章主要介紹了Mysql的SELECT語句與顯示表結(jié)構(gòu)詳解的相關(guān)資料,需要的朋友可以參考下2023-01-01MySQL數(shù)據(jù)庫事務(wù)transaction示例講解教程
這篇文章主要為大家介紹了MySQL數(shù)據(jù)庫事務(wù)transaction的示例講解教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步2021-10-10Mysql中關(guān)于on,in,as,where的區(qū)別
這篇文章主要介紹了Mysql中關(guān)于on,in,as,where的區(qū)別說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-03-03