mysql 中 count(*) 和 count(1) 的区别?

Sat*_*dey 5 mysql

在 MySql 中,我们可以使用 count(1) 或 count(*) 来统计记录总数。

它们之间有什么技术区别吗?

Stu*_*tLC 10

他们是一样的。这在Stackoverflow这里经常被问到

count(*), count(0), count(1), count(-1)
Run Code Online (Sandbox Code Playgroud)

都返回计数。

事实上,在SQL Server 中,甚至不计算表达式。

编辑事实上,在SQL服务器一个COUNT(ALL ...)常量表达式不会出现在所有被评估,但是,一个COUNT(DISTINCT ...)是*。

例如

select count(ALL 1/0) from xyz; -- Succeeds
Run Code Online (Sandbox Code Playgroud)

select count(DISTINCT 1/0) from xyz;  -- Divide by Zero
Run Code Online (Sandbox Code Playgroud)

并且至少有一个例外是 NULL

select count(1) from xyz; -- Operand data type void type is invalid for count operator.
Run Code Online (Sandbox Code Playgroud)

count(1/0)无论行数如何,MySQL 中的 FWR 都返回 0。

  • COUNT(xxx) 返回存在 xxx 的行数,您可以使用 COUNT(column) 来计算非 NULL 列的数量(“SELECT count(xxx) FROM table”在概念上与“SELECT xxx 中的行数”相同FROM 表'")。有鉴于此,COUNT(*) 与 COUNT(1) 的逻辑相同,并且在某些系统中为 COUNT(1/0) 返回 0(没有记录包含 1/0)。 (2认同)