クエリを介してMySQLのデータベース構造を取得する方法


171

どういうわけか、MySQLデータベースの構造、または単純なクエリでいくつかのテーブルを取得することは可能ですか?

または、別の方法があります。どうすればよいですか。

回答:


260

あなたが求めているのは DESCRIBE

DESCRIBE table;

あなたも使うことができます SHOW TABLES

SHOW TABLES;

データベース内のテーブルのリストを取得します。


6
特定のデータベースの使用をターゲットにするには: SHOW TABLES FROM database_name
Tarik

109

データベース構造全体を一連のCREATE TABLEステートメントとして取得するには、mysqldumpを使用します。

mysqldump database_name --compact --no-data

単一のテーブルの場合、mysqldumpでデータベース名の後にテーブル名を追加します。SQLとSHOW CREATE TABLEでも同じ結果が得られます。

SHOW CREATE TABLE table;

または、列リストが必要な場合はDESCRIBE

DESCRIBE table;

3
show create tableまさに私が探していたものでした。ありがとう!
Shai

これは解決策ではありませんが、この関数が存在することを知らなかったので、私は感謝しています。
Ari Waisberg、2018

41

をご覧くださいINFORMATION_SCHEMATABLESテーブル。すべてのテーブルに関するメタデータが含まれています。

例:

SELECT * FROM `INFORMATION_SCHEMA`.`TABLES`
WHERE TABLE_NAME LIKE 'table1'

他の方法に対するこれの利点は、上記のようなクエリを他のクエリのサブクエリとして簡単に使用できることです。


6
そうじゃないかinformation_schemacolumnscolumnsテーブルの代わりにテーブルを使用しますtablesか?tablesテーブルの列のタイプに関する情報が含まれていないため
Dimitry K

第二の利点は、HDDがneccesary読んでいないので、情報スキーマはサーバの起動時にメモリにロードされていることである
bortunac

はい、間違いなく表ではなく列にする必要があります!それはごちそうです!
ラッセルフルトン

32

これを使用して:

SHOW CREATE TABLE `users`;

あなたを与えるだろうDDLをそのテーブル用

DESCRIBE `users`

そのテーブルの列をリストします


1
soulmerge、それがそのテーブルのDDLステートメントであることを確認してください
duckyflip

はい、それはDDLのステートメントですが、C関数自体はCではありません。Cは言語であり、Cプログラムの関数はその言語内の構造です。
soulmerge 2009年

18
@soulmerge、私もペダントですが、ここでは間違っていると思います。「「ありがとう」のフランス語は「merci」です」は、かなり受け入れられる英語の文章です(「フランス語の言葉」以上) 、これは「このテーブルのDDL」のように「{{表現するもの}}の{{言語名}}」に一般化されます。「AC関数自体はCではない」は「フランス語の単語自体はフランス語ではない」と同じです。もちろん、フランス語だけではありませんが、「Au revoir」はフランス語です。それはフランス語の一部ではなく、フランス語の一部であることを意味します!-)。
Alex Martelli、

@soulmerge。はい、間違いなく投票する理由...お楽しみください!
mate00

dafuqqはここで起こっている
Niton

19
SELECT *
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_SCHEMA = 'test' AND TABLE_NAME ='products'; 

Table_schemaデータベース名はどこですか


情報スキーマを選択する方法はありますか。列-特定のデータベースからのテーブル?
Shan

私は自分の側でこのクエリを使用しましたSELECT TABLE_NAME, COLUMN_NAME, DATA_TYPE, IS_NULLABLE, COLUMN_COMMENT FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'my_db_name' AND TABLE_NAME ='users';
Ahmed Numaan


8

私が役に立ったと思った最初の答えのバリエーション

コマンドプロンプトを開いて入力します(mysqlサーバーにログインする必要はありません)。

mysqldump -hlocalhost -u<root> -p<password>  <dbname>  --compact --no-data > </path_to_mydump/>mysql.dmp

私はこれが好きです、それはcreateステートメントを与えます。
Thufir 2014


2

次の例では、

playgroundはデータベース名で、equipmentはテーブル名です

別の方法は、SHOW-COLUMNS:5.5を使用することです(でも使用可能5.5>

$ mysql -uroot -p<password> -h<host> -P<port> -e \
    "SHOW COLUMNS FROM playground.equipment"

そして出力:

mysql: [Warning] Using a password on the command line interface can be insecure.
+-------+-------------+------+-----+---------+----------------+
| Field | Type        | Null | Key | Default | Extra          |
+-------+-------------+------+-----+---------+----------------+
| id    | int(11)     | NO   | PRI | NULL    | auto_increment |
| type  | varchar(50) | YES  |     | NULL    |                |
| quant | int(11)     | YES  |     | NULL    |                |
| color | varchar(25) | YES  |     | NULL    |                |
+-------+-------------+------+-----+---------+----------------+

mysqlshow-client(でも利用可能5.5>)を次のように使用することもできます。

$ mysqlshow -uroot -p<password> -h<host> -P<port> \
    playground equipment

そして出力:

mysqlshow: [Warning] Using a password on the command line interface can be insecure.
Database: playground  Table: equipment
+-------+-------------+-------------------+------+-----+---------+----------------+---------------------------------+---------+
| Field | Type        | Collation         | Null | Key | Default | Extra          | Privileges                      | Comment |
+-------+-------------+-------------------+------+-----+---------+----------------+---------------------------------+---------+
| id    | int(11)     |                   | NO   | PRI |         | auto_increment | select,insert,update,references |         |
| type  | varchar(50) | latin1_swedish_ci | YES  |     |         |                | select,insert,update,references |         |
| quant | int(11)     |                   | YES  |     |         |                | select,insert,update,references |         |
| color | varchar(25) | latin1_swedish_ci | YES  |     |         |                | select,insert,update,references |         |
+-------+-------------+-------------------+------+-----+---------+----------------+---------------------------------+---------+

0

最近では、のDESC代わりに使用していますDESCRIPTION。例えば:- DESC users;

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.