DB全体で検索したい2〜3の異なる列名があり、それらの列を持つすべてのテーブルをリストします。簡単なスクリプトはありますか?
データベースcolumnA
の列ColumnB
またはYourDatabase
を持つすべてのテーブルを取得するには、次の手順を実行します。
SELECT DISTINCT TABLE_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME IN ('columnA','ColumnB')
AND TABLE_SCHEMA='YourDatabase';
SELECT TABLE_NAME, COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME LIKE '%wild%';
もっと簡単にSQLの1行で行われる:
SELECT * FROM information_schema.columns WHERE column_name = 'column_name';
SELECT DISTINCT TABLE_NAME, COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE column_name LIKE 'employee%'
AND TABLE_SCHEMA='YourDatabase'
information_schema
がないバージョン(古いバージョン、またはいくつかのndb)では、テーブル構造をダンプして手動で列を検索できます。
mysqldump -h$Host -u$user -p$pass --compact --no-data --all-databases > some_file.sql
今すぐあなたの好みのテキストエディタを使用してsome_file.sql
で列名を検索するか、いくつかの気の利いたawkスクリプトを使用してください。
そして、カラムを見つけるための簡単なsedスクリプトで、 COLUMN_NAME を自分のものに置き換えてください。
sed -n '/^USE/{h};/^CREATE/{H;x;s/\nCREATE.*\n/\n/;x};/COLUMN_NAME/{x;p};' <some_file.sql
USE `DATABASE_NAME`;
CREATE TABLE `TABLE_NAME` (
`COLUMN_NAME` varchar(10) NOT NULL,
ダンプをsedに直接パイプ処理することはできますが、それは簡単です。
これの逆を探している人、すなわち特定の列名を含まないテーブルを探している人のために、これはクエリです...
SELECT DISTINCT TABLE_NAME FROM information_schema.columns WHERE
TABLE_SCHEMA = 'your_db_name' AND TABLE_NAME NOT IN (SELECT DISTINCT
TABLE_NAME FROM information_schema.columns WHERE column_name =
'column_name' AND TABLE_SCHEMA = 'your_db_name');
InnoDBの特別なai_col
カラムの使用をゆっくりと実装し始め、200のテーブルのうちどれをアップグレードする必要があるのかを把握する必要があるとき、これは本当に役に立ちました。
「 すべてのテーブルだけを取得する 」が必要な場合は、次のクエリを使用します。
SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME like '%'
and TABLE_SCHEMA = 'tresbu_lk'
" Columnsを持つ全てのテーブルを取得するには "が必要な場合は、次のクエリを使用します。
SELECT DISTINCT TABLE_NAME, COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE column_name LIKE '%'
AND TABLE_SCHEMA='tresbu_lk'
この1行のクエリを使用して、desired_column_nameをあなたのカラム名に置き換えてください。
SELECT TABLE_NAME FROM information_schema.columns WHERE column_name = 'desired_column_name';
SELECT DISTINCT TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME LIKE '%city_id%' AND TABLE_SCHEMA='database'
Information_schemaの問題は、それがひどく遅くなる可能性があることです。 SHOWコマンドを使用するほうが速いです。
データベースを選択した後、最初にクエリSHOW TABLESを送信します。そして、それぞれのテーブルに対してSHOW COLUMNSを行います。
PHPでは、これは次のようになります。
$ res = mysqli_query( "ショーテーブル"); while($ row = mysqli_fetch_array($ res)) {$ rs2 = mysqli_query( "SHOW "。$ row [0]); while($ rw2 = mysqli_fetch_array($ rs2)) {if($ rw2 [0] == $ target) .... } }