MySQL中實(shí)現(xiàn)分頁操作的實(shí)戰(zhàn)指南
一、 背景
什么是分頁,就是查詢時(shí)候數(shù)據(jù)量太大,一次性返回所有查詢結(jié)果既耗費(fèi)網(wǎng)絡(luò)資源、又降低了查詢效率,用戶也不可能一下子看完成千上萬條數(shù)據(jù)。所以分頁的技術(shù)就應(yīng)運(yùn)而生。分頁可以只顯示指定數(shù)量的數(shù)據(jù)。
分頁在我們的生活中隨處可見,如下圖所示的電商網(wǎng)站:
二、 實(shí)現(xiàn)規(guī)則
2.1 關(guān)鍵字 LIMIT
在MySQL中,使用關(guān)鍵字 LIMIT 實(shí)現(xiàn)分頁操作。格式為:
LIMIT 位置偏移量, 每頁條目數(shù);
當(dāng) 位置偏移量 等于 0 時(shí),該語句可簡寫為:
LIMIT 每頁條目數(shù);
【例子1】查詢員工表 employees
中的員工的 employee_id
、last_name
、salary
和 department_id
信息。并按每頁 20 條來顯示。
# 寫法一 SELECT employee_id, last_name, salary FROM employees LIMIT 0, 20; # 寫法二 SELECT employee_id, last_name, salary FROM employees LIMIT 20;
其中,LIMIT
后第一個(gè)參數(shù)是初始偏移量,即從第幾條數(shù)據(jù)開始顯示;第二個(gè)參數(shù)是每頁要顯示多少條數(shù)據(jù)。
查詢結(jié)果:
顯示了員工編號 100~119 的員工。
【例子2】繼續(xù)上面的例子1,上面的代碼只是顯示了第一頁的數(shù)據(jù),如果現(xiàn)在用戶想要顯示第2頁的數(shù)據(jù),應(yīng)該怎么操作呢?可以使用 LIMIT
后第一個(gè)參數(shù)是初始偏移量來讓數(shù)據(jù)庫從第21條數(shù)據(jù) (因?yàn)榈?條數(shù)據(jù)的編號為 0 ,所以第20條數(shù)據(jù)的編號就是20) 開始顯示。如下代碼所示:
SELECT employee_id, last_name, salary FROM employees LIMIT 20, 20;
查詢結(jié)果:
顯示了員工編號 120~139 的員工。
【總結(jié)】總結(jié)一個(gè)分頁的公式,設(shè)每頁顯示的數(shù)據(jù)個(gè)數(shù)為 pageSize,當(dāng)前是第 pageNo 頁,那么就有如下 LIMIT
查詢公式:
LIMIT (pageNo - 1) * pageSize, pageSize;
2.2 查詢數(shù)據(jù)庫表的第 x x x 條記錄
【例子1】查詢員工表 employees
中的第 32、33條員工的數(shù)據(jù)。
SELECT employee_id, last_name, salary FROM employees LIMIT 31, 2;
查詢結(jié)果:
2.3 WHERE…ORDER BY…LIMIT… 的聲明順序 (非執(zhí)行順序)
正確的聲明順序如下代碼所示:
SELECT employee_id, last_name, salary FROM employees WHERE salary >= 5000 ORDER BY salary DESC LIMIT 0, 10;
查詢結(jié)果:
三、 拓展
MySQL8.0中對于分頁新增了一個(gè)新特性,對 LIMIT
后增加了偏移量 OFFSET
:
LIMIT 每頁條目數(shù) OFFSET 初始偏移量;
對比一下原有的格式,無非就是把 初始偏移量 和 每頁條目數(shù) 位置調(diào)轉(zhuǎn)一下,然后把逗號去掉即可。
LIMIT
可以使用在 MySQL、PostgreSQL、MariaDB 和 SQLite 中。LIMIT
不可以使用在 Oracle、DB2、SQL Server 中!
總結(jié)
到此這篇關(guān)于MySQL中實(shí)現(xiàn)分頁操作的文章就介紹到這了,更多相關(guān)MySQL分頁操作內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
windows環(huán)境中mysql忘記root密碼的解決方法詳解
本篇文章是對windows環(huán)境中mysql忘記root密碼的解決方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06MySQL千萬級大表進(jìn)行數(shù)據(jù)清理的幾種常見方案
當(dāng)MySQL數(shù)據(jù)庫中的表數(shù)據(jù)量達(dá)到千萬級別時(shí),直接對數(shù)據(jù)進(jìn)行刪除操作將面臨嚴(yán)重的性能問題,可能會(huì)導(dǎo)致數(shù)據(jù)庫長時(shí)間的鎖表,因此,如何安全高效地進(jìn)行數(shù)據(jù)清理成為一個(gè)亟需解決的問題,下面我將分享幾種常見的數(shù)據(jù)清理方案,需要的朋友可以參考下2023-11-11解決MySQL登錄報(bào)錯(cuò)1130:1130?Host?***.***.***.***?is?not?allowe
有時(shí)候在登錄到MySQL服務(wù)器時(shí)會(huì)遇到1130錯(cuò)誤,這是因?yàn)闊o法連接到MySQL服務(wù)器或其他一些原因,這篇文章主要給大家介紹了關(guān)于解決MySQL登錄報(bào)錯(cuò)1130:1130?Host?***.***.***.***?is?not?allowed?to?connect?to?this?MySQL?server的相關(guān)資料,需要的朋友可以參考下2023-12-12MySQL數(shù)據(jù)誤刪除的快速解決方法(MySQL閃回工具)
Binlog2sql是一個(gè)Python開發(fā)開源的MySQL Binlog解析工具,能夠?qū)inlog解析為原始的SQL,也支持將Binlog解析為回滾的SQL,去除主鍵的INSERT SQL,是DBA和運(yùn)維人員數(shù)據(jù)恢復(fù)好幫手,下面小編通過教程給大介紹MySQL數(shù)據(jù)誤刪除的快速解決方法,一起看看吧2019-10-10mysql中數(shù)據(jù)庫覆蓋導(dǎo)入的幾種方式總結(jié)
這篇文章主要介紹了mysql中數(shù)據(jù)庫覆蓋導(dǎo)入的幾種方式總結(jié),具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03