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