すべてのMySQLテーブル間のすべての関係を見つける方法は?たとえば、約100個のテーブルがあるデータベースのテーブルの関係を知りたい場合。
とにかくこれを知っていますか?
プログラム的に言えば、より良い方法は、次のようにINFORMATION_SCHEMA.KEY_COLUMN_USAGEテーブルからデータを収集することです。
SELECT
`TABLE_SCHEMA`, -- Foreign key schema
`TABLE_NAME`, -- Foreign key table
`COLUMN_NAME`, -- Foreign key column
`REFERENCED_TABLE_SCHEMA`, -- Origin key schema
`REFERENCED_TABLE_NAME`, -- Origin key table
`REFERENCED_COLUMN_NAME` -- Origin key column
FROM
`INFORMATION_SCHEMA`.`KEY_COLUMN_USAGE` -- Will fail if user don't have privilege
WHERE
`TABLE_SCHEMA` = SCHEMA() -- Detect current schema in USE
AND `REFERENCED_TABLE_NAME` IS NOT NULL; -- Only tables with foreign keys
ORDINAL_POSITIONなど、目的に応じて役立つ列情報がさらにあります。
詳細:http://dev.mysql.com/doc/refman/5.1/en/key-column-usage-table .html
これを試して:
select * from INFORMATION_SCHEMA.TABLE_CONSTRAINTS;
試して
選択
`TABLE_NAME`、
`COLUMN_NAME`、
`REFERENCED_TABLE_NAME`、
`REFERENCED_COLUMN_NAME`
FROM `information_schema`.`KEY_COLUMN_USAGE`
WHERE `CONSTRAINT_SCHEMA` = 'YOUR_DATABASE_NAME' AND
`REFERENCED_TABLE_SCHEMA` IS NOT NULL AND
`REFERENCED_TABLE_NAME` IS NOT NULL AND
`REFERENCED_COLUMN_NAME` IS NOT NULL
yOUR_DATABASE_NAMEをデータベース名に置き換えることを忘れないでください!
MySQLで関係を視覚化する簡単な方法は、 MySQL Workbench を使用してデータベースをリバースエンジニアリングすることです。
これは、リバースエンジニアリングを使用して行うこともできます。これにより、次のようなエンティティ関係図が作成されます(ただし、生成されたら、自分で整理する必要があります)。
SELECT
count(1) totalrelationships ,
c.table_name tablename,
CONCAT(' ',GROUP_CONCAT(c.column_name ORDER BY ordinal_position SEPARATOR ', ')) columnname,
CONCAT(' ',GROUP_CONCAT(c.column_type ORDER BY ordinal_position SEPARATOR ', ')) columntype
FROM
information_schema.columns c RIGHT JOIN
(SELECT column_name , column_type FROM information_schema.columns WHERE
-- column_key in ('PRI','MUL') AND -- uncomment this line if you want to see relations only with indexes
table_schema = DATABASE() AND table_name = 'YourTableName') AS p
USING (column_name,column_type)
WHERE
c.table_schema = DATABASE()
-- AND c.table_name != 'YourTableName'
GROUP BY tablename
-- HAVING (locate(' YourColumnName',columnname) > 0) -- uncomment this line to search for specific column
ORDER BY totalrelationships desc, columnname
;
次を使用できます。
SHOW CREATE TABLE table_name;
1)データベースに移動します:use DATABASE;
2)すべてのテーブルを表示する:show tables;
3)テーブルの各列を見て、テーブルの機能と構成要素を収集します。describe TABLENAME;
4)テーブルの列が何をするのかを正確に把握できるので、説明するのは良いことですが、データ自体をさらに詳しく調べたい場合は、select * from TABLENAME
大きなテーブルがある場合、通常、各行にはid
があります。この場合、数行のデータを取得し、端末が圧倒されないようにするためにこれを実行します。select * from TABLENAME where id<5
-任意の条件をここに入れることができます。
このメソッドは、select * from INFORMATION_SCHEMA.TABLE_CONSTRAINTS;
を実行するだけでなく、より多くの情報を提供します。また、毎回、より大きなサイズの情報を提供します。
[〜#〜] edit [〜#〜]
コメントが示唆したように、上記のWHERE id < 5
は条件付きプレースホルダーとして悪い選択でした。特にIDは通常、連続していることが信頼できないため、ID番号で制限することはお勧めできません。代わりに、クエリの最後にLIMIT 5
を追加してください。
1つのオプションは次のとおりです。リバースエンジニアリングを実行して、図式的に理解することができます。
MySQLをインストールすると、MySQLWorkbenchが取得されます。それを開き、リバースエンジニアリングするデータベースを選択する必要があります。ツールまたはデータベースメニューのどこかにあるリバースエンジニアリングオプションをクリックします。テーブルを選択するように求められます。理解するテーブルを選択するか、DB全体を選択します。リレーションシップを持つダイアグラムを生成します。