ど素人から毛を生やす。<延>

[MySQL]レコードが存在するテーブルを抽出

Web > Other 2020年11月5日(最終更新:3年前)

2020年11月5日に作成されたページです。
情報が古かったり、僕が今以上のど素人だった頃の記事だったりする可能性があります。

どもです。

テーブルがたくさんあるけど、使われていないテーブルもたくさんあるDBで、使われている=レコードが存在するテーブルのみ抽出したかった。

参考:
[Qiita]MySQLで全テーブルのレコード数を一覧表示する

これWHEREに追記したらレコードが存在するテーブルだけ抽出できそうですね。

SELECT table_name, table_rows FROM INFORMATION_SCHEMA.TABLES WHERE table_schema = 'DB名' AND table_rows > 0;

これでOKでした。

どうやらINFORMATION_SCHEMAテーブルというところにアクセスすれば、DBの色々な情報が見られるようですね。


○追記
mysql4.1とかいうド旧いDBでこれをやろうとしたら、
SELECT command denied to user '****'@'***.**.**.***' for table 'TABLES
というエラーを返されました。
権限が無いのかな?と思ったら、そもそもド旧すぎてINFORMATION_SCHEMAが存在してないとのこと。

そこで
SHOW TABLE STATUS FROM DB名
とすると、Rows列にレコード数が出るので、これでなんとか目的が達成できます。
ただし、絞り込みができないのと、InnoDBだと正確なレコード数を返してくれない可能性があるらしいので、そこんとこは注意。

いや、INFORMATION_SCHEMA未搭載のMySQLバージョンでMyISAMじゃなくてInnoDB使ってるとか、そんなアンバランスなDBはさすがに存在しないと思うけど…

この記事は役に立ちましたか?
  • _(:3」∠)_ 面白かった (0)
  • (・∀・) 参考になった (0)
  • (`・ω・´) 役に立った (0)