ユニークなインデックスが存在しないテーブルを求める
※MySQLを前提として書いています
先日弊社のphpMyAdminを3.x系から4.x系にアップデートしまして
「PRIMARY/UNIQUEのいずれのインデックスも張られていないテーブルのレコードは編集/削除不可」という問題まっとうな仕様変更にぶち当たったので、
そのとき影響範囲の調査に使った
「PRIMARY/UNIQUEのいずれのインデックスも張られていないテーブル一覧」を求めるクエリをメモ。
…ピンポイントすぎてもう使わない気がしなくもないですが、「○○なテーブル一覧」レベルであれば出すこともありそうなので、参考として、一応。
SELECT `TABLES`.`TABLE_NAME`, `COLUMNS`.`COLUMN_KEY` FROM `information_schema`.`TABLES` LEFT JOIN `information_schema`.`COLUMNS` ON `TABLES`.`TABLE_NAME` = `COLUMNS`.`TABLE_NAME` AND `COLUMNS`.`COLUMN_KEY` IN ('UNI', 'PRI') WHERE `TABLES`.`TABLE_SCHEMA` = '【データベース名】' AND `COLUMNS`.`COLUMN_KEY` IS NULL GROUP BY `TABLES`.`TABLE_NAME`
ユニークキーが存在しないテーブルっていう仕様がそもそもだめなのでは、というアレ