imit是mysql的語(yǔ)法
在錦屏等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專(zhuān)注、極致的服務(wù)理念,為客戶提供成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作、外貿(mào)營(yíng)銷(xiāo)網(wǎng)站建設(shè) 網(wǎng)站設(shè)計(jì)制作定制網(wǎng)站制作,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),成都品牌網(wǎng)站建設(shè),成都全網(wǎng)營(yíng)銷(xiāo)推廣,外貿(mào)網(wǎng)站制作,錦屏網(wǎng)站建設(shè)費(fèi)用合理。
select * from table limit m,n
其中m是指記錄開(kāi)始的index,從0開(kāi)始,表示第一條記錄
n是指從第m+1條開(kāi)始,取n條。
select * from tablename limit 2,4
即取出第3條至第6條,4條記錄
SELECT @rownum:=@rownum+1 AS rownum, tablename.*
FROM (SELECT @rownum:=0) r, tablename
你好,mysql本身是沒(méi)有行號(hào)的。要想得到查詢(xún)語(yǔ)句返回的列中包含一列表示該行記錄在整個(gè)結(jié)果集中的行號(hào)可以通過(guò)自定義set一個(gè)變量,然后每條記錄+1的方式,返回這個(gè)變量的值。
舉例:
表名為:s_ave
表的內(nèi)容:
Ave Avename
1 d
3 e
4 a
6 b
5 e
我們要查詢(xún) ave=6 的行號(hào):
set @mytemp = 0;
select * from (
SELECT (@mytemp:=@mytemp+1) as newid,Ave,Avename FROM s_ave
) AS A
WHERE A.Ave=6
自己試一下吧,這里 mytemp 的值就是行號(hào)。
提示:在數(shù)據(jù)庫(kù)應(yīng)用,我們經(jīng)常要用到唯一編號(hào),以標(biāo)識(shí)記錄。在MySQL中可通過(guò)數(shù)據(jù)列的AUTO_INCREMENT屬性來(lái)自動(dòng)生成。MySQL支持多種數(shù)據(jù)表,每種數(shù)據(jù)表的自增屬性都有差異,這里將介紹各種數(shù)據(jù)表里的數(shù)據(jù)列自增屬性。
在數(shù)據(jù)庫(kù)應(yīng)用,我們經(jīng)常要用到唯一編號(hào),以標(biāo)識(shí)記錄。在MySQL中可通過(guò)數(shù)據(jù)列的AUTO_INCREMENT屬性來(lái)自動(dòng)生成。MySQL支持多種數(shù)據(jù)表,每種數(shù)據(jù)表的自增屬性都有差異,這里將介紹各種數(shù)據(jù)表里的數(shù)據(jù)列自增屬性。
ISAM表
如果把一個(gè)NULL插入到一個(gè)AUTO_INCREMENT數(shù)據(jù)列里去,MySQL將自動(dòng)生成下一個(gè)序列編號(hào)。編號(hào)從1開(kāi)始,并1為基數(shù)遞增。
把0插入AUTO_INCREMENT數(shù)據(jù)列的效果與插入NULL值一樣。但不建議這樣做,還是以插入NULL值為好。
當(dāng)插入記錄時(shí),沒(méi)有為AUTO_INCREMENT明確指定值,則等同插入NULL值。
當(dāng)插入記錄時(shí),如果為AUTO_INCREMENT數(shù)據(jù)列明確指定了一個(gè)數(shù)值,則會(huì)出現(xiàn)兩種情況,情況一,如果插入的值與已有的編號(hào)重復(fù),則會(huì)出現(xiàn)出錯(cuò)信息,因?yàn)锳UTO_INCREMENT數(shù)據(jù)列的值必須是唯一的;情況二,如果插入的值大于已編號(hào)的值,則會(huì)把該插入到數(shù)據(jù)列中,并使在下一個(gè)編號(hào)將從這個(gè)新值開(kāi)始遞增。也就是說(shuō),可以跳過(guò)一些編號(hào)。
如果自增序列的最大值被刪除了,則在插入新記錄時(shí),該值被重用。
如果用UPDATE命令更新自增列,如果列值與已有的值重復(fù),則會(huì)出錯(cuò)。如果大于已有值,則下一個(gè)編號(hào)從該值開(kāi)始遞增。
如果用replace命令基于AUTO_INCREMENT數(shù)據(jù)列里的值來(lái)修改數(shù)據(jù)表里的現(xiàn)有記錄,即AUTO_INCREMENT數(shù)據(jù)列出現(xiàn)在了replace命令的where子句里,相應(yīng)的AUTO_INCREMENT值將不會(huì)發(fā)生變化。但如果replace命令是通過(guò)其它的PRIMARY KEY OR UNIQUE索引來(lái)修改現(xiàn)有記錄的(即AUTO_INCREMENT數(shù)據(jù)列沒(méi)有出現(xiàn)在replace命令的where子句中),相應(yīng)的AUTO_INCREMENT值--如果設(shè)置其為NULL(如沒(méi)有對(duì)它賦值)的話--就會(huì)發(fā)生變化。
last_insert_id()函數(shù)可獲得自增列自動(dòng)生成的最后一個(gè)編號(hào)。但該函數(shù)只與服務(wù)器的本次會(huì)話過(guò)程中生成的值有關(guān)。如果在與服務(wù)器的本次會(huì)話中尚未生成AUTO_INCREMENT值,則該函數(shù)返回0。
其它數(shù)據(jù)表的自動(dòng)編號(hào)機(jī)制都以ISAM表中的機(jī)制為基礎(chǔ)。
MyISAM數(shù)據(jù)表
刪除最大編號(hào)的記錄后,該編號(hào)不可重用。
可在建表時(shí)可用“AUTO_INCREMENT=n”選項(xiàng)來(lái)指定一個(gè)自增的初始值。
可用alter table table_name AUTO_INCREMENT=n命令來(lái)重設(shè)自增的起始值。
可使用復(fù)合索引在同一個(gè)數(shù)據(jù)表里創(chuàng)建多個(gè)相互獨(dú)立的自增序列,具體做法是這樣的:為數(shù)據(jù)表創(chuàng)建一個(gè)由多個(gè)數(shù)據(jù)列組成的PRIMARY KEY OR UNIQUE索引,并把AUTO_INCREMENT數(shù)據(jù)列包括在這個(gè)索引里作為它的最后一個(gè)數(shù)據(jù)列。這樣,這個(gè)復(fù)合索引里,前面的那些數(shù)據(jù)列每構(gòu)成一種獨(dú)一無(wú)二的組合,最末尾的AUTO_INCREMENT數(shù)據(jù)列就會(huì)生成一個(gè)與該組合相對(duì)應(yīng)的序列編號(hào)
Oracle 中可以使用標(biāo)準(zhǔn)方法(8i版本以上),也可以使用非標(biāo)準(zhǔn)的 ROWNUM ; MS SQL Server 則在 2005 版本中提供了 ROW_NUMBER() 函數(shù);但在 MySQL 中似乎還沒(méi)有這樣的系統(tǒng)自帶功能。雖然 LIMIT 可以很方便的對(duì)返回的結(jié)果集數(shù)量和位置進(jìn)行過(guò)濾,但過(guò)濾出來(lái)的記錄的行號(hào)卻沒(méi)辦法被 SELECT 到。據(jù)說(shuō) MySQL 是早就想增加這個(gè)功能了,但我是還沒(méi)找到。 解決方法是通過(guò)預(yù)定義用戶變量來(lái)實(shí)現(xiàn): set @mycnt = 0; select (@mycnt := @mycnt + 1) as ROWNUM , othercol from tblname order by othercol; 這樣查詢(xún)出來(lái)的結(jié)果集中 ROWNUM 就保存了行編號(hào)信息。這個(gè)行編號(hào)信息的某種用途在于當(dāng)你需要根據(jù)需要對(duì)數(shù)據(jù)按照某種規(guī)則排序并取出排序之后的某一行數(shù)據(jù),并且希望知道這行數(shù)據(jù)在之前排序中的位置時(shí)就用得著了。比如: set @mycnt = 0; select * from ( select (@mycnt := @mycnt + 1) as ROWNUM , othercol from tblname order by othercol ) as A where othercol=OneKeyID; 當(dāng)然你也可以通過(guò)創(chuàng)建臨時(shí)表的方法把查詢(xún)結(jié)果寫(xiě)到某個(gè)擁有 auto_increment 字段的臨時(shí)表中再做查詢(xún),但考慮到臨時(shí)表在 MySQL master / slave 模式下可能產(chǎn)生的問(wèn)題,用這樣臨時(shí)用戶定義變量的方式來(lái)計(jì)算查詢(xún)結(jié)果集每一行對(duì)應(yīng)的行號(hào)還是更為簡(jiǎn)潔 -- 除非你愿意在 PHP 或其他語(yǔ)言腳本中對(duì)返回的整個(gè)結(jié)果集再作處理。
你也可以用下面的語(yǔ)句修改下一個(gè)起始值和步進(jìn)值:
alter
table
tblorder
alter
column
orderid
counter
(2000,
50)
要重新開(kāi)始:
alter
table
tablename
alter
column
orderid
counter
(1,
1)