【问题标题】:Export database schema as ASCII from mySQL so I can post it on SO从 mySQL 将数据库模式导出为 ASCII,以便我可以将其发布到 SO
【发布时间】:2012-08-17 20:31:29
【问题描述】:

当我需要询问 mySQL 数据库架构问题时 - 我尝试“写出”我的表架构 - 但它很长。

所以我检查了 SO - 但我找不到答案:有没有办法自动从 mySQL(或 phpmyadmin)自动生成 ASCII 样式的数据库架构?

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

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

人们是怎么做到的?最好的方法是什么?

【问题讨论】:

    标签: mysql phpmyadmin schema


    【解决方案1】:

    在 phpMyAdmin 中,首先选择您的数据库,然后转到导出功能,并保持结构勾选,取消勾选数据,并取消勾选另存为文件。然后,单击开始。一般来说,我会一次性导出所有表格,但您可以使用左侧的选择器选择要导出的表格。

    编辑:我刚刚注意到您要求提供“模式”,但您的说明同时涉及模式和数据。尽管您可以在 phpMyAdmin 中导出两者,但这不会像您的插图所示那样格式化。也许最好的方法是将导出为CREATE TABLEINSERT,然后将其添加到SQLFiddle?这样做的好处是,回答您问题的人可以轻松地创建示例并进行实验。

    【讨论】:

      【解决方案2】:

      我不确定 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 上的文本框中时,不要忘记 SO 要将其显示为代码,您需要选择内容,然后单击 {} 将其格式化为代码。或者,只需将其左缩进,每行 4 个空格。

      希望这可以解决您的问题,尽管它不像您希望的那样automatic,但我相信使用类似xclipmysql 命令的脚本可以接近这个,完成automatically :-)

      【讨论】:

        【解决方案3】:

        您的问题实际上是指打印表数据,而不是模式。如果我理解正确,您正在考虑以漂亮的格式打印出数据,包括精美的框架和所有内容。

        在这种情况下,请查看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)
        

        这是您刚刚在命令行上键入并获得的内容的副本。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-05-22
          • 2021-07-22
          • 1970-01-01
          • 2017-12-01
          • 2013-10-24
          • 2020-09-23
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多