アナログCPU:5108843109

ゲームと音楽とプログラミング(酒と女とロックンロールのノリで)

('ω') < イザユケエンジニャー

ユニークなインデックスが存在しないテーブルを求める

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`

ユニークキーが存在しないテーブルっていう仕様がそもそもだめなのでは、というアレ