You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在MySQL数据库中按指定条件统计所有表的记录数?

统计数据库中所有表近30天的记录数

原来通过information_schema.tables获取的table_rows是MySQL维护的近似统计值,并非实时精确的行数,而且该视图无法关联表内的date_time字段做条件过滤,所以要统计符合date_time >= CURDATE() - INTERVAL 30 DAY的记录数,必须针对每个表执行带条件的COUNT()查询。

方法一:手动生成并执行联合查询

  1. 先查询mydb库中包含date_time字段的所有表:
SELECT table_name
FROM information_schema.columns
WHERE table_schema = 'mydb' AND column_name = 'date_time';
  1. 对每个返回的表,拼接COUNT()查询并通过UNION ALL合并结果:
SELECT 'table1' AS table_name, COUNT(*) AS recent_rows FROM mydb.table1 WHERE date_time >= CURDATE() - INTERVAL 30 DAY
UNION ALL
SELECT 'table2' AS table_name, COUNT(*) AS recent_rows FROM mydb.table2 WHERE date_time >= CURDATE() - INTERVAL 30 DAY
UNION ALL
-- 继续添加其他表的查询语句
;

方法二:用存储过程自动遍历统计

如果表数量较多,写存储过程可以自动完成遍历和统计:

DELIMITER //
CREATE PROCEDURE count_recent_rows()
BEGIN
    DECLARE done INT DEFAULT FALSE;
    DECLARE tbl_name VARCHAR(255);
    -- 定义游标,获取所有含date_time字段的表
    DECLARE cur CURSOR FOR 
        SELECT table_name 
        FROM information_schema.columns 
        WHERE table_schema = 'mydb' AND column_name = 'date_time';
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

    -- 创建临时表存储结果
    DROP TABLE IF EXISTS temp_recent_counts;
    CREATE TEMPORARY TABLE temp_recent_counts (table_name VARCHAR(255), recent_rows INT);

    OPEN cur;
    read_loop: LOOP
        FETCH cur INTO tbl_name;
        IF done THEN
            LEAVE read_loop;
        END IF;
        -- 动态生成统计语句并执行
        SET @sql = CONCAT('INSERT INTO temp_recent_counts SELECT ''', tbl_name, ''', COUNT(*) FROM mydb.', tbl_name, ' WHERE date_time >= CURDATE() - INTERVAL 30 DAY;');
        PREPARE stmt FROM @sql;
        EXECUTE stmt;
        DEALLOCATE PREPARE stmt;
    END LOOP;
    CLOSE cur;

    -- 返回统计结果
    SELECT * FROM temp_recent_counts;
END //
DELIMITER ;

调用存储过程即可获取结果:

CALL count_recent_rows();

注意事项

  • 确保mydb库中的目标表都存在date_time字段,否则需要调整游标中的过滤条件;
  • 如果date_time是DATETIME类型,CURDATE() - INTERVAL 30 DAY会自动转换为YYYY-MM-DD 00:00:00,能准确筛选近30天(包含当天)的记录;
  • 临时表temp_recent_counts会在会话结束后自动销毁,无需手动清理。

内容的提问来源于stack exchange,提问作者appu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 00:50:59