翻譯|使用教程|編輯:李爽夏|2019-02-13 14:05:35.000|閱讀 949 次
概述:本篇文章介紹了如何獲取MySQL中的行數(shù)。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關(guān)鏈接:
Navicat Premium是一個可連接多種數(shù)據(jù)庫的管理工具,它可以讓你以單一程序同時連接到MySQL、Oracle及PostgreSQL數(shù)據(jù)庫,讓管理不同類型的數(shù)據(jù)庫更加的方便。
在MySQL中有幾種獲取行數(shù)的方法。一些數(shù)據(jù)庫管理產(chǎn)品提供數(shù)據(jù)庫統(tǒng)計(jì)信息,如表大小,但也可以使用直接的SQL來完成。在這篇文章中,我們將使用本機(jī)COUNT()函數(shù)來檢索MySQL數(shù)據(jù)庫中一個表或視圖中的行數(shù)。在第2部分中,我們將學(xué)習(xí)如何從多個表甚至從數(shù)據(jù)庫中的所有表中獲取行計(jì)數(shù)。
您可能已經(jīng)知道COUNT()函數(shù)返回表中的行數(shù)。但是還有一點(diǎn)要比這個多,因?yàn)镃OUNT()函數(shù)可以用來計(jì)算表中的所有行,或者只計(jì)算那些符合特定條件的行。秘密在函數(shù)簽名中,它有幾種形式:COUNT(*)、COUNT(expression)和COUNT(DISTINCT expression)。
在每種情況下,COUNT()都返回一個BIGINT,該BIGINT包含匹配行的數(shù)量,如果未找到匹配行,則返回零。
要對表中的所有行進(jìn)行計(jì)數(shù),無論它們是否包含空值,請使用COUNT(*)。該形式的COUNT()函數(shù)基本上返回由SELECT語句返回的結(jié)果集中的行數(shù)。
SELECT COUNT(*) FROM cities;
像上面這樣的語句,在沒有WHERE子句或附加列的情況下調(diào)用COUNT(*)函數(shù),將在MyISAM表上執(zhí)行得非???,因?yàn)樾袛?shù)存儲在information_schema數(shù)據(jù)庫的Tables表的Table_Rows列中。
對于事務(wù)性存儲引擎(如InnoDB),存儲精確的行計(jì)數(shù)是有問題的,因?yàn)镮nnoDB不在表中保留行的內(nèi)部計(jì)數(shù)。如果是這樣,并發(fā)事務(wù)可能會同時“看到”不同數(shù)量的行。因此,SELECT COUNT(*)語句只對當(dāng)前事務(wù)可見的行進(jìn)行計(jì)數(shù)。這意味著,在繁重的工作負(fù)載期間使用COUNT(*) 運(yùn)行查詢可能會導(dǎo)致數(shù)字稍微不準(zhǔn)確。
不向COUNT()傳遞任何內(nèi)容將執(zhí)行函數(shù)的COUNT(expr)版本,但sans參數(shù)除外。這樣調(diào)用COUNT()只返回不包含空值的行。例如,假設(shè)我們有一個名為code_values的簡單表:
code_values +-------+ | code | +-------+ | 1 | +-------+ | | +-------+ | | +-------+ | 4 | +-------+
從表中選擇COUNT()將返回2,即使有4行:
SELECT COUNT(*) FROM code_values; +---------+ | COUNT() | +---------+ | 2 | +---------+
請注意,很少使用此版本的COUNT()函數(shù),因?yàn)樵谝?guī)范化的數(shù)據(jù)庫中,空行不應(yīng)該是問題,這種情況只有在表沒有主鍵時才會發(fā)生。在大多數(shù)情況下,COUNT(*)都可以正常工作。
當(dāng)然,COUNT(expr)確實(shí)接受正確的表達(dá)式。下面是另一個同樣獲取空行和非空行的查詢:
SELECT COUNT(IFNULL(code, 1)) FROM code_values;
COUNT函數(shù)的COUNT(expr)版本還接受單個列名,其效果是COUNT(column_name)將返回column_name不為空的記錄數(shù)。因此,以下SELECT查詢將獲取描述列包含非空值的行數(shù):
SELECT COUNT(description) FROM widgets;
在第2部分中,我們將學(xué)習(xí)如何使用COUNT(DISTINCT expression)簽名以及如何從多個表中獲取行計(jì)數(shù)。
購買Navicat Premium正版授權(quán),請點(diǎn)擊“”喲!
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@fc6vip.cn