5

mySQL データベース スキーマについて質問する必要がある場合、テーブル スキーマを「書き出し」てみますが、かなり長くなります。

SOをチェックしましたが、答えが見つかりませんでした.mySQL(またはphpmyadmin)から自動的にASCIIスタイルのデータベーススキーマを自動的に生成する方法はありますか?

つまり、このようなものを自動的に取得したい:

+----------+---------+----------------------------+
|  user_ID | user    |   roles                    |
+----------+---------+----------------------------+
|        1 |   Smith |    1                       |
+----------+---------+----------------------------+
|        2 |   Jones |    1                       |
+----------+---------+----------------------------+

人々はどのようにそれをしますか?最善の方法は何ですか?

4

3 に答える 3

8

phpMyAdminがあなたの望むことを実行できるかどうかは定かではありませんが、mysqlプロンプトを使用してこれを正確に取得できます。方法は次のとおりです。

テーブルのスキーマだけが必要だと仮定しますmy_table

ターミナルを開き、mysql必要に応じてユーザー名(-u)とパスワード(-p)を渡して実行します。Windowsでは、mysql binディレクトリがパス上にあることを確認する必要がある場合があります(Windowsで作業している場合は、パス上にmysqlを含めることもできます)。

mysqlターミナルができたら;

利用可能なデータベースを確認したい場合があります。

show databases;

使用するデータベースを選択します。

use this_database;

また、(このデータベースで)使用可能なテーブルを確認することもできます。

show tables;

ここで、テーブルのスキーマ/定義を確認するにはmy_table、次のコマンドを実行します。

describe my_table;

これにより、たとえば次のようなASCIIできれいに印刷された出力が得られるはずです。

+--------------------+--------------+------+-----+---------+----------------+
| Field              | Type         | Null | Key | Default | Extra          |
+--------------------+--------------+------+-----+---------+----------------+
| id                 | int(11)      | NO   | PRI | NULL    | auto_increment |
| name               | varchar(50)  | NO   |     | NULL    |                |
| location_id        | int(11)      | NO   | MUL | NULL    |                |
| manager_id         | int(11)      | NO   | MUL | NULL    |                |
| other              | varchar(100) | YES  |     | NULL    |                |
| creation_timestamp | datetime     | NO   |     | NULL    |                |
| is_active          | tinyint(1)   | NO   |     | NULL    |                |
+--------------------+--------------+------+-----+---------+----------------+

必要なスキーマとデータの場合は、クエリを使用して、列名と必要な行を決定している可能性がありSELECTます。たとえば、次のようなものです。

SELECT * FROM stores LIMIT 2;

次のようになります。

+----+------------+-------------+------------+-------+---------------------+-----------+
| id | name       | location_id | manager_id | other | creation_timestamp  | is_active |
+----+------------+-------------+------------+-------+---------------------+-----------+
|  1 | Good Store |           1 |          1 |       | 2012-06-17 19:14:15 |         1 |
|  2 | Neu Store  |           2 |          1 |       | 2012-06-29 05:14:24 |         1 |
+----+------------+-------------+------------+-------+---------------------+-----------+

注:上記のすべての例で、mysqlは(ページングまたは方向が変更されていない限り)確実に出力を取得しますが、この出力をコピーしてSOに貼り付ける場合は、コピーして貼り付ける必要がありますターミナル/コンソールから; 標準のlinux/unixターミナルでは、マウスを使用して出力を選択し、を使用してクリップボードにコピーしてから、Control+Shift+CSOに貼り付けることができます。ウィンドウでは、マウスで選択した後、右クリックして選択するcopyか、コンソールウィンドウから選択して出力を選択する必要があると思いmarkます。その後、クリップボードに自動的に表示され、SOに貼り付けることができます。 。

また、出力をSOのテキストボックスに貼り付ける場合、SOがそれをコードとして表示するには、コンテンツを選択し、をクリックし{}てコードとしてフォーマットする必要があることを忘れないでください。または、各行に4つのスペースを入れて左インデントします。

これで問題が解決することautomaticを願っていますが、思ったほどではありませんが、次のようなものを使用したスクリプトxclipmysqlコマンドがこれに近づく可能性があると思いますautomatically:-)

于 2012-08-25T14:54:49.563 に答える
2

あなたの質問は、スキーマではなく、実際にテーブルデータを印刷することを指しています。そして、私が正しく理解していれば、データをきれいな形式で、派手なフレームなどで印刷しようとしています。

その場合は、クライアント側で MySQL 結果セットをファイルにエクスポートする方法 をご覧ください。

特に、teeMySQL コマンド ライン内からコマンドを使用できます。これにより、コマンド ラインに表示されるすべてがファイルに複製されます。例えば:

mysql> tee /tmp/nice_output.txt
mysql> SELECT 1 AS one, 2, 3 FROM DUAL;
+-----+---+---+
| one | 2 | 3 |
+-----+---+---+
|   1 | 2 | 3 |
+-----+---+---+

お気に入りのエディターを使用してファイルを開き、次を見つけます。

mysql> SELECT 1 AS one, 2, 3 FROM DUAL;
+-----+---+---+
| one | 2 | 3 |
+-----+---+---+
|   1 | 2 | 3 |
+-----+---+---+
1 row in set (0.00 sec)

これは、コマンドラインで入力して取得したもののコピーです。

于 2012-08-26T04:25:47.730 に答える
1

phpMyAdmin で、最初にデータベースを選択してから、エクスポート機能に移動し、構造にチェックを入れたままにして、データのチェックを外し、ファイルとして保存のチェックを外します。次に、[移動] をクリックします。通常、すべてのテーブルを一度にエクスポートしますが、左側の選択チューザーを使用してエクスポートするものを選択できます。

編集:「スキーマ」を要求したことに気付きましたが、あなたのイラストはスキーマとデータの両方です。phpMyAdmin で両方のエクスポートを実行できますが、これは図に示すように整形されません。おそらく最良の方法は、エクスポートをCREATE TABLEandとして実行しINSERT、それをSQLFiddleに追加することでしょうか? これには、質問に答える人々が例をフォークして簡単に実験できるという利点があります。

于 2012-08-24T12:33:18.343 に答える