読者です 読者をやめる 読者になる 読者になる

文系プログラマによるTIPSブログ

文系プログラマ脳の私が開発現場で学んだ事やプログラミングのTIPSをまとめています。

全テーブル・ビューのカウント結果を取得する

mysql

DBを管理していると、全テーブル・ビューのカウント数を取りたい時がある(よね?)。
毎回カウントするのがめんどいので、シェルスクリプトを書いてみた。
rootはパス無し前提なので、rootのパスが有る人は適当にいじってね。

#!/bin/sh

schemaName=$1
if [ -z $schemaName ]; then
    echo "Usage:<schemaName>"
    exit 1
fi
tables=($(mysql -uroot information_schema -Ne "select table_name from tables where table_schema='$schemaName';"))
views=($(mysql -uroot information_schema -Ne "select table_name from views where table_schema='$schemaName';"))

if [ -z $tables ] && [ -z $views ]; then
    echo "table and view are not found."
    exit 1
fi

sql="select "
for table in "${tables[@] views[@]}"
do
    sql="$sql(select count(*) from $table) $table,"
done
sql="$(echo $sql | sed -e 's/,$//') \G"
mysql -uroot $schemaName -e "$sql"

実行するとこんな風になる。

$ ./getAllCount.sh test
 *************************** 1. row ***************************
  enumtest: 5
    t_bulk: 0
     t_del: 0
    t_test: 317222
   t_test2: 10
   t_test3: 0
t_test_new: 3
    v_test: 317222

別にテーブル毎にcountしてもいいんだけど、きったない表示になるので、一括で\Gで見やすい表示にしてみた。
table_name のカラム名の部分は、-N オプションによって非表示にしているのです。