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)签名以及如何从多个表中获取行计数。