【问题标题】:How to get database structure in MySQL via query如何通过查询在 MySQL 中获取数据库结构
【发布时间】:2010-10-28 06:35:17
【问题描述】:

是否有可能以某种方式获得 MySQL 数据库的结构,或者只是一些简单查询的表?

或者还有其他方法,我该怎么做?

【问题讨论】:

    标签: mysql


    【解决方案1】:

    我想你追求的是DESCRIBE

    DESCRIBE table;
    

    你也可以使用SHOW TABLES

    SHOW TABLES;
    

    获取数据库中表的列表。

    【讨论】:

    • 针对特定数据库使用:SHOW TABLES FROM database_name
    【解决方案2】:

    要将整个数据库结构作为一组CREATE TABLE 语句,请使用mysqldump:

    mysqldump database_name --compact --no-data
    

    对于单个表,在 mysqldump 中的 db name 后面添加表名。使用 SQL 和 SHOW CREATE TABLE 得到相同的结果:

    SHOW CREATE TABLE table;
    

    或DESCRIBE,如果您更喜欢列列表:

    DESCRIBE table;
    

    【讨论】:

    • show create table 正是我想要的。谢谢!
    • 这不是解决方案,但我很感激,因为我不知道这个功能存在并且很棒!
    【解决方案3】:

    查看INFORMATION_SCHEMA.TABLES 表。它包含有关所有表的元数据。

    例子:

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

    与其他方法相比,此方法的优势在于您可以轻松地将上述查询用作其他查询中的子查询。

    【讨论】:

    • 不应该是information_schema.columns(使用columns表而不是tables?因为tables不包含任何关于哪些类型是表格列
    • 第二个优点是信息模式在服务器启动时加载到内存中,因此无需读取硬盘
    • 是的,绝对应该是 COLUMS 而不是 TABLES!这是一种享受!
    【解决方案4】:

    使用这个:

    SHOW CREATE TABLE `users`;
    

    将为您提供该表的DDL

    DESCRIBE `users`
    

    将列出该表中的列

    【讨论】:

    • soulmerge,确定这是该表的 DDL 语句
    • 是的,它是 DDL 中的语句,但 C 函数本身并不是 C。C 是一种语言,C 程序中的函数是该语言中的构造。
    • @soulmerge,我也是一个学究,但我认为你在这里错了:“'thanks' 的法语是'merci'”是一个完全可以接受的英语句子(不少于“法语 WORD for”等),这概括为“The {{language name}} for {{thing to express}}”,例如“The DDL for this table”。 “AC 函数本身不是 C”与说“一个法语单词本身不是法语”是一样的:当然,这不是法语的全部,但是说“‘Au revoir’是法语”几乎是令人反感的(显然这意味着它是法语的一部分,而不是全部法语!-)。
    • @soulmerge。是的,绝对是投反对票的理由……享受吧!
    • dafuqq 在这里进行
    【解决方案5】:
    SELECT *
    FROM INFORMATION_SCHEMA.COLUMNS 
    WHERE TABLE_SCHEMA = 'test' AND TABLE_NAME ='products'; 
    

    Table_schema 是数据库名称

    【讨论】:

    • 有没有办法选择信息架构。列 - 来自特定数据库的表?
    • 我最后使用了这个查询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';
    【解决方案6】:

    这是SHOW CREATE TABLE 查询。你也可以查询SCHEMA TABLES。

    SHOW CREATE TABLE YourTableName;
    

    【讨论】:

      【解决方案7】:

      我发现有用的第一个答案的变体

      打开你的命令提示符并输入(你不必登录到你的mysql服务器)

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

      【讨论】:

      • 我喜欢这个,它给出了创建语句。
      【解决方案8】:

      您可以选择以下任一命令。它们都或多或少相同:

      SHOW CREATE TABLE TABLE_NAME;

      DESC TABLE_NAME;

      SHOW FULL COLUMNS FROM TABLE_NAME;(用于列属性)

      EXPLAIN TABLE_NAME;

      DESCRIBE TABLE_NAME;

      【讨论】:

        【解决方案9】:

        在下面的例子中,

        playground 是数据库名,equipment 是表名

        另一种方法是使用SHOW-COLUMNS:5.5(也适用于5.5&gt;)

        $ 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&gt;),如下所示:

        $ 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 |         |
        +-------+-------------+-------------------+------+-----+---------+----------------+---------------------------------+---------+
        

        【讨论】:

          【解决方案10】:

          选择COLUMN_NAME 来自INFORMATION_SCHEMA.COLUMNS 在哪里TABLE_SCHEMA='bodb' 和TABLE_NAME='abc';

          适用于获取所有列名

          【讨论】:

            【解决方案11】:

            如今,人们使用DESC 而不是DESCRIPTION。例如:- DESC users;

            【讨论】:

              猜你喜欢
              • 2012-01-15
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2020-09-18
              • 2011-05-17
              • 2017-04-25
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多