当我需要询问mySQL数据库架构问题时 - 我尝试“写出”我的表架构 - 但它很长。
所以我检查了 - 但是我找不到答案:有没有办法从mySQL(或phpmyadmin)自动生成ASCII样式的数据库模式?
即。我想自动得到这样的东西:
+----------+---------+----------------------------+
| user_ID | user | roles |
+----------+---------+----------------------------+
| 1 | Smith | 1 |
+----------+---------+----------------------------+
| 2 | Jones | 1 |
+----------+---------+----------------------------+
人们如何做到这一点?什么是最好的方式?
答案 0 :(得分:8)
我不确定phpMyAdmin可以做你想要的,但是你可以通过使用mysql提示来获得这个。方法如下:
假设您只想要表my_table
的模式。
打开终端并运行mysql
传递用户名(-u)和密码(-p)(如果需要)。在Windows上,您可能希望确保mysql bin目录位于路径上(如果您在Windows上工作,则可能还需要mysql on the PATH)。
一旦有了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+C
将其复制到剪贴板,然后将其粘贴到SO上。在Windows上,用鼠标选择后,我想您可以右键单击并选择copy
,或者您需要从控制台窗口中选择mark
,然后选择输出,之后它应该是自动的可在剪贴板上找到,以便粘贴到SO。
此外,当您将输出粘贴到SO上的文本框中时,请不要忘记,为了将其显示为代码,您需要选择内容,然后单击{}
将其格式化为码。或者,只需左键缩进,每行有4个空格。
希望这可以解决您的问题,尽管它不像您可能希望的那样automatic
,但我相信使用xclip
和mysql
命令之类的脚本可能会接近这个,完成automatically
: - )
答案 1 :(得分:2)
您的问题实际上是指打印表数据,而不是模式。如果我理解正确的话,你会看到以漂亮的格式打印数据,使用精美的帧和所有。
在这种情况下,请查看Ways to export MySQL result set to file on client side。
特别是,您可以在MySQL命令行中使用tee
命令,该命令将您在命令行上看到的所有内容复制到文件中。例如:
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)
这是您刚刚在命令行输入的内容的副本。
答案 2 :(得分:1)
在phpMyAdmin中,首先选择您的数据库,然后转到导出功能,并保持结构选中,取消勾选数据,并取消选中另存为文件。然后,单击Go。一般情况下,我一次性导出所有表格,但您可以使用左侧的选择选择器选择要导出的表格。
编辑:我刚刚注意到你要求'架构',但你的插图是架构和数据。虽然您可以在phpMyAdmin中导出两者,但是如图所示,格式不正确。也许最好的方法是以CREATE TABLE
和INSERT
进行导出,然后将其添加到SQLFiddle?这样做的好处是,回答您问题的人可以轻松地进行示例和实验。