web-dev-qa-db-ja.com

MySQLでテーブルメタデータを取得する

MySQL5.0のテーブルから次の制約情報を取得する方法を見つけようとしています。

  • 主キー
  • 外部キーとテーブル参照
  • 一意の列

そのための1つまたは複数のクエリの構文は何ですか? this に近い気がしますが、例はありません。

16
VirtuosiMedia

SHOW COLUMNS コマンドは、テーブルの主キーと一意の列を表示します。

外部キーに関しては、couldは、 SHOW CREATE TABLE コマンドのようなものを使用して、複製に必要なDDLステートメントを出力します。テーブル。

9
fluffels

MySQLの場合:

1)テーブル/フィールドのメタデータを取得

SELECT table_schema, table_name, column_name, ordinal_position, data_type, 
       numeric_precision, column_type, column_default, is_nullable, column_comment 
  FROM information_schema.columns 
  WHERE (table_schema='schema_name' and table_name = 'table_name')
  order by ordinal_position;

[〜#〜]または[〜#〜]

show fields from 'table_name' 

2)Foregn Keys参照テーブルを取得します

SELECT `REFERENCED_TABLE_NAME` 
   FROM `information_schema`.`KEY_COLUMN_USAGE`
   WHERE
       `TABLE_NAME` = 'table_name' AND
       `COLUMN_NAME` = 'Column_Name'

)テーブルのインデックス(プライマリおよび外部)を取得します

show keys from `table_name`

5)すべてのインデックスと参照テーブルを取得します

SELECT *
  FROM `KEY_COLUMN_USAGE`
  WHERE
      `TABLE_NAME` = 'table_name' AND
      `TABLE_SCHEMA` = 'schema_name'

[〜#〜]または[〜#〜]

SELECT *
  FROM `REFERENTIAL_CONSTRAINTS`
  WHERE
      `TABLE_NAME` = 'table_name' AND
      `CONSTRAINT_SCHEMA` = 'schema_name'

6)ストアドプロシージャを取得します

SELECT * 
  FROM `ROUTINES`
  WHERE
     `ROUTINE_SCHEMA` = 'schema_name'

7)トリガーを取得

SELECT * 
  FROM `TRIGGERS`
  WHERE 
     `TRIGGER_SCHEMA` = 'schema_name'

8)イベントを取得

SELECT * 
  FROM `EVENTS`
  WHERE 
     `EVENT_SCHEMA` = 'schema_name'

9)VIEWSを取得

SELECT *
  FROM `VIEWS`
  WHERE
      `TABLE_NAME` = 'table_name' AND
      `TABLE_SCHEMA` = 'schema_name'
17
Nelson Santos

使用する

 show fields from table_name
 show keys from table_name

主キー、外部キー、一意などを取得します。

外部キーによって参照されるテーブルを取得するには、次を使用します。

 SELECT `REFERENCED_TABLE_NAME` 
 FROM `information_schema`.`KEY_COLUMN_USAGE` 
 WHERE 
     `TABLE_NAME` = '[table_containing_foreign_key]' AND 
     `COLUMN_NAME` = '[foreign_key]'

[table_containing_foreign_key][foreign_key]を値に置き換えます

8
jx12345

select Queryを使用して同じものを取得するには、以下を使用します。

SELECT table_schema, table_name, column_name, ordinal_position, data_type, numeric_precision, column_type FROM information_schema.columns WHERE table_name = '[TABLE_NAME]';
2
PKMeiyappan

あなたはそれを試してみるべきです。 INFORMATION_SCHEMAはいくつかの標準の一部であり、他のデータベースでも(ほとんど)同様の方法でサポートされています。この標準は文書化する必要があります-あなたはその文書を探すことができます。

ただし、主な方法は、一連のテストテーブルを作成してから、INFORMATION_SCHEMAを調べてそこに何があるかを確認することです。

2
MarkR