从mySQL导出数据库模式为ASCII,所以我可以在SO上发布它

Lau*_*nce 5 mysql schema phpmyadmin

当我需要问一个mySQL数据库模式问题时 - 我尝试"写出"我的表模式 - 但它很长.

所以我检查SO -但我无法找到一个答案:有没有办法来自动生成自动从MySQL(或phpMyAdmin的)一个ASCII风格的数据库模式?

即我想自动得到这样的东西:

+----------+---------+----------------------------+
|  user_ID | user    |   roles                    |
+----------+---------+----------------------------+
|        1 |   Smith |    1                       |
+----------+---------+----------------------------+
|        2 |   Jones |    1                       |
+----------+---------+----------------------------+
Run Code Online (Sandbox Code Playgroud)

人们如何做到这一点?什么是最好的方法?

nem*_*ixx 8

我不确定phpMyAdmin可以做你想要的,但你可以通过使用mysql提示得到这个.这是如何做:

假设你只想要一个表的模式my_table.

mysql如果需要,打开终端并运行用户名(-u)和密码(-p).在Windows上,您可能希望确保mysql bin目录位于路径上(如果您正在使用Windows,则可能还希望在PATH上使用mysql).

一旦你有一个mysql终端;

您可能想要查看哪些数据库可用:

show databases;
Run Code Online (Sandbox Code Playgroud)

选择要使用的数据库:

use this_database;
Run Code Online (Sandbox Code Playgroud)

您可能还希望查看哪些表可用(在此数据库中):

show tables;
Run Code Online (Sandbox Code Playgroud)

现在,要查看表的模式/定义,例如my_table,运行以下命令:

describe my_table;
Run Code Online (Sandbox Code Playgroud)

这应该会得到像这样的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    |                |
+--------------------+--------------+------+-----+---------+----------------+
Run Code Online (Sandbox Code Playgroud)

如果它是您想要的架构+数据,那么您可能正在使用SELECT查询来确定列名称以及您想要的任何行.例如这样的事情:

SELECT * FROM stores LIMIT 2;
Run Code Online (Sandbox Code Playgroud)

将给出以下内容:

+----+------------+-------------+------------+-------+---------------------+-----------+
| 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 |
+----+------------+-------------+------------+-------+---------------------+-----------+
Run Code Online (Sandbox Code Playgroud)

注意:在上面的所有例子中,mysql肯定会得到我显示的输出(除非分页或方向改变),但是你要将这个输出复制并粘贴到SO上,你需要复制并粘贴从终端/控制台; 在标准的linux/unix终端上,您可以使用鼠标选择输出,然后使用它将其复制到剪贴板上,然后将其Control+Shift+C粘贴到SO上.在Windows上,用鼠标选择后,我认为你可以右键单击并选择copy或者你需要mark从控制台窗口中选择,然后选择输出,之后它应该自动在剪贴板上可供你粘贴到SO上.

此外,当您将输出粘贴到SO上的文本框中时,不要忘记,为了将其显示为代码,您需要选择内容,然后单击{}以将其格式化为代码.或者,只需左键缩进,每行有4个空格.

希望这可以解决你的问题,但它并不像automatic你可能已经祝愿,但我使用类似相信脚本xclipmysql命令,可以得到接近这个,做了automatically:-)