MySQL获取数据库内所有表格数据总数的示例代码

 更新时间:2024年11月28日 11:38:17   作者:蜡笔小新星  
在 MySQL 中,要获取数据库内所有表格的数据总数,可以编写一个查询脚本来遍历每个表并计算其行数,所以本文给大家介绍了MySQL获取数据库内所有表格数据总数的示例,需要的朋友可以参考下

在 MySQL 中,要获取数据库内所有表格的数据总数,可以编写一个查询脚本来遍历每个表并计算其行数。你可以使用 INFORMATION_SCHEMA 数据库,它包含了关于数据库元数据的表格,如 TABLES 和 COLUMNS。

以下是一个示例脚本,展示了如何使用 SQL 查询和存储过程来获取所有表格的数据总数:

使用 SQL 查询和脚本

  • 查询所有表的行数(直接方法,适合命令行工具)

如果你只是临时需要这些信息,并且你的数据库表数量不多,可以直接在命令行工具中运行以下查询:

SELECT 
    table_name AS 'Table',
    table_rows AS 'Rows'
FROM 
    information_schema.tables
WHERE 
    table_schema = 'your_database_name'
    AND table_type = 'BASE TABLE';

将 your_database_name 替换为你的实际数据库名称。table_rows 列提供了每个表的行数估算值(对于 InnoDB 表,这可能是一个估算值,而不是精确值)。

  1. 使用存储过程(适合更复杂的场景)

如果你只想获取所有表的总行数,可以使用以下查询:

SELECT SUM(table_rows) 
FROM information_schema.tables 
WHERE table_schema = 'your_database_name';

这将返回数据库中所有表的行数总和。

  • 使用存储过程(适合更复杂的场景)

如果你需要更灵活或者更复杂的处理,可以创建一个存储过程来遍历所有表并计算其行数。以下是一个示例存储过程:

DELIMITER //  -- 设置新的语句结束符为"//",以便在存储过程中使用";"而不结束整个存储过程的定义。
 
CREATE PROCEDURE CountAllTableRows()  -- 创建一个名为CountAllTableRows的存储过程。
BEGIN
    -- 变量声明部分
    DECLARE done INT DEFAULT FALSE;  -- 声明一个名为done的整型变量,用于标记游标是否读取完毕,初始值为FALSE。
    DECLARE tbl_name VARCHAR(255);    -- 声明一个名为tbl_name的字符串变量,用于存储当前处理的表名。
    DECLARE row_count INT DEFAULT 0;  -- 声明一个名为row_count的整型变量,用于临时存储行数(但在这个过程中并未使用到)。
    
    -- 游标声明部分
    DECLARE cur CURSOR FOR  -- 声明一个名为cur的游标。
        SELECT table_name   -- 游标查询的SQL语句,从information_schema.tables中选择表名。
        FROM information_schema.tables 
        WHERE table_schema = 'your_database_name'  -- 限定查询的数据库名(需要替换为实际的数据库名)。
          AND table_type = 'BASE TABLE';  -- 只选择基本表(排除视图等)。
 
    -- 继续处理游标结束时的处理器
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;  -- 当游标读取不到数据时,设置done为TRUE。
 
    -- 临时表声明部分
    CREATE TEMPORARY TABLE IF NOT EXISTS temp_row_counts (  -- 创建一个名为temp_row_counts的临时表(如果不存在)。
        table_name VARCHAR(255),  -- 存储表名。
        row_count BIGINT  -- 存储行数,使用BIGINT以支持大表。
    );
 
    -- 打开游标
    OPEN cur;
 
    -- 读取循环
    read_loop: LOOP  -- 定义一个名为read_loop的循环。
        FETCH cur INTO tbl_name;  -- 从游标中读取一个表名到tbl_name变量。
        IF done THEN  -- 判断是否读取完毕。
            LEAVE read_loop;  -- 如果读取完毕,则离开循环。
        END IF;
 
        -- 获取当前表的行数
        SET @s = CONCAT('SELECT COUNT(*) INTO @cnt FROM ', tbl_name);  -- 拼接动态SQL语句。
        PREPARE stmt FROM @s;  -- 准备执行动态SQL语句。
        EXECUTE stmt;  -- 执行动态SQL语句,结果存储在@cnt变量中。
        DEALLOCATE PREPARE stmt;  -- 释放动态SQL语句。
 
        -- 将行数插入临时表
        INSERT INTO temp_row_counts (table_name, row_count) VALUES (tbl_name, @cnt);  -- 将表名和行数插入临时表。
    END LOOP;
 
    -- 关闭游标
    CLOSE cur;
 
    -- 从临时表中选择结果
    SELECT * FROM temp_row_counts;  -- 查询并显示临时表中的所有记录。
 
    -- 删除临时表
    DROP TEMPORARY TABLE IF EXISTS temp_row_counts;  -- 删除临时表(如果存在)。
END //  -- 存储过程定义结束。
 
DELIMITER ;  -- 将语句结束符重置为默认的";"。

然后,你可以通过调用存储过程来获取所有表的行数:

CALL CountAllTableRows();

注意事项:

  1. 在实际使用存储过程之前,需要将 ‘your_database_name’ 替换为实际的数据库名称。
  2. 存储过程中使用了动态SQL(通过 PREPARE 和 EXECUTE 语句),这是因为在存储过程中直接执行包含变量作为表名的SQL语句是不被允许的。
  3. 临时表 temp_row_counts 用于存储每个表的行数,以便在存储过程结束时能够一次性查询并显示所有结果。
  4. 使用 BIGINT 类型来存储行数,以支持可能非常大的表。

敲黑板

  1. 性能:对于非常大的数据库,这些方法可能非常耗时和占用资源。
  2. 估算值:对于 InnoDB 表,table_rows 列可能是一个估算值,而不是精确值。如果需要精确值,必须执行 COUNT(*) 查询。
  3. 权限:确保你的数据库用户有足够的权限访问 INFORMATION_SCHEMA 并执行所需的查询。

通过上述方法,你可以轻松获取 MySQL 数据库中所有表格的数据总数。

到此这篇关于MySQL获取数据库内所有表格数据总数的示例代码的文章就介绍到这了,更多相关MySQL获取表格数据总数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • MYSQL中查询LONGBLOB类型数据的大小的详细示例

    MYSQL中查询LONGBLOB类型数据的大小的详细示例

    在MySQL中,LONGBLOB 是一种二进制大对象(BLOB)数据类型,用于存储大量的二进制数据,但是,LONGBLOB 数据类型本身并不直接存储数据的大小(长度),它存储的是二进制数据的实际内容,这篇文章主要介绍了MYSQL中怎么查询LONGBLOB类型数据的大小,需要的朋友可以参考下
    2024-06-06
  • Mysql+Navicat16长期免费直连数据库安装使用超详细教程

    Mysql+Navicat16长期免费直连数据库安装使用超详细教程

    这篇文章主要介绍了Mysql+Navicat16长期免费直连数据库安装教程,这里下载的是mysql8版本,第一个安装包比较小, 第二个安装包比较大, 因为包含调试工具,我这里下载的是第一个,详细介绍跟随小编一起看看吧
    2023-11-11
  • mysql数据库的加密与解密方式

    mysql数据库的加密与解密方式

    这篇文章主要介绍了mysql数据库的加密与解密方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • win32 mysql 5.7.27 安装配置方法图文教程

    win32 mysql 5.7.27 安装配置方法图文教程

    这篇文章主要为大家详细介绍了win32 mysql 5.7.27 安装配置方法图文教程,文中安装步骤介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-10-10
  • mysql删除关联表的实操方法

    mysql删除关联表的实操方法

    在本篇内容里我们给大家整理了关于mysql删除关联表的实操方法以及相关SQL语句,需要的朋友们学习下吧。
    2019-05-05
  • mysql 常用命令集锦(Linux/Windows)

    mysql 常用命令集锦(Linux/Windows)

    这篇文章主要介绍了Linux/Windows系统下mysql 常用的命令,需要的朋友可以参考下
    2014-07-07
  • mysql5.7同时使用group by和order by报错问题

    mysql5.7同时使用group by和order by报错问题

    这篇文章主要介绍了mysql5.7同时使用group by和order by报错的问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • mysql 8.0.16 winx64安装配置方法图文教程

    mysql 8.0.16 winx64安装配置方法图文教程

    这篇文章主要为大家分享了mysql 8.0.16 安装配置方法图文教程,具有一定的参考价值,感兴趣的朋友可以参考一下
    2019-05-05
  • 草稿整理后mysql两个数据库结构对比

    草稿整理后mysql两个数据库结构对比

    这篇文章主要为大家详细介绍了mysql两个数据库结构对比结果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-02-02
  • ARM64架构下安装mysql5.7.22的全过程

    ARM64架构下安装mysql5.7.22的全过程

    这篇文章主要介绍了ARM64架构下安装mysql5.7.22的全过程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-07-07

最新评论