Navicat Premium是一個可鏈接多種數據庫的管理工具,它可讓你以單一程序同時鏈接到MySQL、Oracle及PostgreSQL數據庫,讓管理不一樣類型的數據庫更加的方便。express
在MySQL中有幾種獲取行數的方法。一些數據庫管理產品提供數據庫統計信息,如表大小,但也可使用直接的SQL來完成。在這篇文章中,咱們將使用本機COUNT()函數來檢索MySQL數據庫中一個表或視圖中的行數。在第2部分中,咱們將學習如何從多個表甚至從數據庫中的全部表中獲取行計數。併發
您可能已經知道COUNT()函數返回表中的行數。可是還有一點要比這個多,由於COUNT()函數能夠用來計算表中的全部行,或者只計算那些符合特定條件的行。祕密在函數簽名中,它有幾種形式:COUNT(*)、COUNT(expression)和COUNT(DISTINCT expression)。函數
在每種狀況下,COUNT()都返回一個BIGINT,該BIGINT包含匹配行的數量,若是未找到匹配行,則返回零。工具
要對錶中的全部行進行計數,不管它們是否包含空值,請使用COUNT(*)。該形式的COUNT()函數基本上返回由SELECT語句返回的結果集中的行數。學習
1spa |
|
像上面這樣的語句,在沒有WHERE子句或附加列的狀況下調用COUNT(*)函數,將在MyISAM表上執行得很是快,由於行數存儲在information_schema數據庫的Tables表的Table_Rows列中。orm
對於事務性存儲引擎(如InnoDB),存儲精確的行計數是有問題的,由於InnoDB不在表中保留行的內部計數。若是是這樣,併發事務可能會同時「看到」不一樣數量的行。所以,SELECT COUNT(*)語句只對當前事務可見的行進行計數。這意味着,在繁重的工做負載期間使用COUNT(*) 運行查詢可能會致使數字稍微不許確。事務
不向COUNT()傳遞任何內容將執行函數的COUNT(expr)版本,但sans參數除外。這樣調用COUNT()只返回不包含空值的行。例如,假設咱們有一個名爲code_values的簡單表:
1 2 3 4 5 6 7 8 9 10 11 12 |
|
從表中選擇COUNT()將返回2,即便有4行:
1 2 3 4 5 6 |
|
請注意,不多使用此版本的COUNT()函數,由於在規範化的數據庫中,空行不該該是問題,這種狀況只有在表沒有主鍵時纔會發生。在大多數狀況下,COUNT(*)均可以正常工做。
固然,COUNT(expr)確實接受正確的表達式。下面是另外一個一樣獲取空行和非空行的查詢:
1 |
|
COUNT函數的COUNT(expr)版本還接受單個列名,其效果是COUNT(column_name)將返回column_name不爲空的記錄數。所以,如下SELECT查詢將獲取描述列包含非空值的行數:
1 |
|
在第2部分中,咱們將學習如何使用COUNT(DISTINCT expression)簽名以及如何從多個表中獲取行計數。