9

私は現在スクリプトを使用しています

SELECT SUM(TABLE_ROWS) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'Tables';

ただし、MySQLテーブルで使用されるエンジンはInnoDBであるため、正確ではありません(これらのデータベースがしばらく存在していたため、これが問題になる可能性があることに気づきました)。

MySQLを使用してデータベースのすべてのテーブルのすべての行の正確な数を取得する方法はありますか?

乾杯。

4

6 に答える 6

13

私は、唯一の正確な(そしてより遅い)方法は、すべてのテーブルに対して行うことだと思います。

SELECT COUNT(*) FROM Table
于 2012-06-06T10:52:21.803 に答える
5

このSQLステートメントは、1つのステップでタスクを完了することができるユニオンクエリを生成します。

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」という単語を削除すると、ユニオンクエリが作成されます。

ユニオンクエリを実行すると、データベースのサイズ、負荷、およびハードウェアによっては多くのリソースが必要になる可能性があるため、一度にすべてを実行したくない場合があることに注意してください。

于 2012-10-09T01:37:43.533 に答える
3

私はこの質問に私を導いた同じ問題を抱えていました。

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
于 2013-02-19T14:40:50.583 に答える
1

Select Sum(column_Name) from table、テーブル内の行の正確な数を指定することはできません。合計行数+1を指定し、次のデータ挿入行も指定します。もう1つsum(Column_Name) 、column_Nameはintである必要があります。これが、varcharまたはcharの場合、sum関数は機能しません。最高のことは Select Count(*) from table 、テーブルの正確な行数を取得するために使用することです。

ThnQ、

ベンカット

于 2012-06-06T13:24:19.180 に答える
0
select table_name,table_rows from INFORMATION_SCHEMA.TABLES where TABLE_SCHEMA='database name';

table_nameは、「データベース」に存在するテーブルの数を意味します

table_rowsは、各列の行数を意味します

table_schemaはデータベース名です。カウントを探しているデータベース

于 2012-12-13T17:45:49.637 に答える
-2

これは私のために働いた

    <?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を出力

于 2012-06-06T11:46:36.853 に答える