我目前正在使用脚本
SELECT SUM(TABLE_ROWS) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'Tables';
然而,这并不准确,因为我的 MySQL 表使用的引擎是 InnoDB(我现在才意识到这可能是一个问题,因为这些数据库已经存在了一段时间)。
有什么方法可以用 MySQL 准确计算数据库每个表中的每一行?
干杯。
我认为唯一准确(且较慢)的方法是为每个表做:
SELECT COUNT(*) FROM Table
这条 SQL 语句会生成一个联合查询,可以一步完成任务:
SELECT CONCAT('SELECT \'', table_name ,'\' as tbl, (SELECT COUNT(*) FROM ', table_name, ') AS ct UNION')
FROM information_schema.tables
WHERE table_schema = 'your_database';
运行 SQL 语句后,只需将输出粘贴到文本编辑器中,从输出末尾删除单词“UNION”,您将获得联合查询。
请注意,运行联合查询可能会占用大量资源,具体取决于您的数据库大小、负载和硬件,因此您可能不想一次全部运行。
我遇到了同样的问题,导致我提出了这个问题。
感谢computerGuy12345的回答,我想出了一个存储过程,无需复制粘贴即可。正如他所说,请注意这将扫描每个表并且可能需要一段时间。
DELIMITER $$
CREATE PROCEDURE `all_tables_rowcount`(databaseName VARCHAR(250))
BEGIN
DECLARE p_done INT DEFAULT FALSE;
DECLARE p_queryString varchar(250) ;
DECLARE p_cur CURSOR FOR SELECT queryString FROM tmp.tableCountQueries;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET p_done = TRUE;
DROP TEMPORARY TABLE IF EXISTS tmp.tableCountQueries;
DROP TEMPORARY TABLE IF EXISTS tmp.tableCounts;
CREATE TEMPORARY TABLE tmp.tableCounts(TableName varchar(250), RowCount BIGINT) ;
CREATE TEMPORARY TABLE tmp.tableCountQueries(queryString varchar(250)) AS
(
SELECT CONCAT(
'INSERT INTO tmp.tableCounts(TableName, RowCount) SELECT "',
table_name,
'", COUNT(*) AS RowCount FROM ',
table_schema,
'.',
table_name
) AS queryString
FROM INFORMATION_SCHEMA.TABLES
WHERE table_schema = databaseName
) ;
OPEN p_cur;
read_loop: LOOP
FETCH p_cur INTO p_queryString;
IF p_done THEN
LEAVE read_loop;
END IF;
SET @queryString = p_queryString ;
PREPARE rowcountTable FROM @queryString;
EXECUTE rowcountTable ;
END LOOP;
SELECT * FROM tmp.tableCounts ;
END
Select Sum(column_Name) from table
,不能给出表中行的准确计数,它会给出总行数+1,也会给出下一个数据插入行。还有一件事是,在sum(Column_Name)
column_Name 中应该是 int ,如果它是 varchar 或 char sum 函数将不起作用。soo 最好的方法是
Select Count(*) from table
用来获取表中的确切行数。
ThnQ,
文卡特
select table_name,table_rows from INFORMATION_SCHEMA.TABLES where TABLE_SCHEMA='database name';
table_name表示“数据库”中存在的表数
table_rows表示每列中的行数
table_schema是数据库名称。您要从哪个数据库中查找计数
这对我有用
<?php
mysql_connect("localhost", "root", "pass") or die(mysql_error());
mysql_select_db("csl") or die(mysql_error());
$dtb=mysql_query("SHOW TABLES") or die (mysql_error());
$jmltbl=0; $jml_record=0; $jml_record=0; $total =0;
while($row=mysql_fetch_array($dtb))
{
$sql=mysql_query("select * from $row[0]");
$jml_record=mysql_num_rows($sql);
$total += $jml_record; // this counts all the rows
$jmltbl++; $jml_record+=$jml_record;
}
// echo"--------$jmltbl Tables, $jml_record records."; // will print count of indivual table
echo $total; // this will print you count of all rows in MySQL database
?>
我已经测试了这段代码及其作品
为我输出 1145