MySQL如果表存在,则选择行数


MySQL Select row-count if table exists

我试图从表中获取行计数,但前提是它存在。(在一个SQL语句中。)

从这个问题中,答案不会返回表中的行计数(如果存在)。如果MySQL不抛出错误"表不存在",怎么能做到这一点??

我的SQL如下:

SELECT CASE
    WHEN
        ( (SELECT COUNT(*) FROM `information_schema`.`tables` WHERE `table_schema` = DATABASE() AND `table_name` = 'testTbl') > 0 )
    THEN
        (SELECT COUNT(*) FROM `testTbl`)
    ELSE
        (SELECT 0)
    END;

EDIT:WHEN-部分返回正确的值(如果表不存在,则为0,如果存在,则返回1)。真正的问题是,当tabel不存在时,整个SQL并没有返回/选择"0",而是返回了一个错误。(因为THEN-子句中提到了不存在的表,从而破坏了之前检查它是否存在的全部目的。换句话说,当表不存在时,它不能忽略THEN-子句中的COUNT-语句。)

这是一个问题,因为我希望返回的值是一个整数(或数值)。

我环顾四周,发现了这个线程。如果表存在,我想计算表中的行数,如果表不存在,则返回-1。用您自己的值替换[database_name][table_name]

SELECT MAX(TABLE_ROWS) AS TABLE_ROWS 
       FROM information_schema.tables 
            WHERE TABLE_SCHEMA = '[database_name]' 
            AND TABLE_NAME = '[table_name]'

此查询返回列TABLE_ROWS,该列具有唯一的行,如果表存在,则包含[table_name]的行数;如果[table_name]不存在,则返回NULL的行数。

如果表不存在,我想返回-1而不是NULL,我使用以下查询:

SELECT IFNULL(MAX(TABLE_ROWS), -1) AS TABLE_ROWS 
       FROM information_schema.tables 
            WHERE TABLE_SCHEMA = '[database_name]' 
            AND TABLE_NAME = '[table_name]'

您必须在查询之前检查tale是否存在:

SHOW TABLES LIKE testTbl;

试试这个:

SELECT COUNT(*)
FROM information_schema.tables 
WHERE table_schema = '[database name]' 
AND table_name = '[table name]';

如果您从查询中得到任何结果,则表存在!

我找到的最接近问题的解决方案是从information_schema表中获取table_rows列(如果该表存在):

SELECT IF(
    (SELECT COUNT(*) FROM `INFORMATION_SCHEMA`.`TABLES` WHERE `TABLE_SCHEMA` = (DATABASE()) AND `TABLE_NAME` = 'tokens_331698')>0,
        (SELECT `TABLE_ROWS` as `x` FROM `INFORMATION_SCHEMA`.`TABLES` WHERE `TABLE_SCHEMA` = (DATABASE()) AND `TABLE_NAME` = 'tokens_331698'),
        0
)

唯一的问题是,我不确定这个行计数值有多准确。(有人吗?)