当前位置: 首页 > news >正文

MySQL获取数据库内所有表格数据总数

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

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

使用 SQL 查询和脚本

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

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

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';

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

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

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

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 数据库中所有表格的数据总数。

http://www.lryc.cn/news/491591.html

相关文章:

  • Matlab 深度学习工具箱 案例学习与测试————求二阶微分方程
  • django authentication 登录注册
  • 三种蓝牙架构实现方案
  • ffmpeg 视频滤镜:高斯模糊-gblur
  • 期权懂|在期权市场中,如何用好双买期权?
  • 【Linux学习】【Ubuntu入门】2-3 make工具和makefile引入
  • 《黑神话:悟空》游戏辅助修改器工具下载指南与操作方法详解
  • C语言菜鸟入门·关键字·union的用法
  • ensp静态路由实验
  • 构建 Java Web 应用程序:从 Servlet 到数据库交互(Eclipse使用JDBC连接Mysql数据库)
  • mfc100u.dll是什么?分享几种mfc100u.dll丢失的解决方法
  • Java面试之多线程并发篇
  • 视频推拉流EasyDSS互联网直播点播平台技术特点及应用场景剖析
  • 安全加固方案
  • Linux firewall防火墙规则
  • 速盾:CDN缓存的工作原理是什么?
  • 日常开发记录-正确的prop传参,reduce搭配promise的使用
  • Hyper-V配置-cnblog
  • 运维Tips:Docker或K8s集群拉取Harbor私有容器镜像仓库配置指南
  • openssl颁发包含主题替代名的证书–SAN
  • Stable Diffusion入门教程
  • H.265流媒体播放器EasyPlayer.js无插件H5播放器关于移动端(H5)切换网络的时候,播放器会触发什么事件
  • conan2 c/c++包管理入门之--------------------------conanfile.py
  • DICOM图像深入解析:为何部分DR/CR图像默认显示为反色?
  • 重新定义社媒引流:AI社媒引流王如何为品牌赋能?
  • 【FPGA】Verilog:利用 4 个串行输入- 串行输出的 D 触发器实现 Shift_register
  • 《硬件架构的艺术》笔记(五):低功耗设计
  • Hive离线数仓结构分析
  • 鱼眼相机模型-MEI
  • GPT系列文章