【问题标题】:Get table names using SELECT statement in MySQL在 MySQL 中使用 SELECT 语句获取表名
【发布时间】:2012-01-10 04:38:42
【问题描述】:

在 MySQL 中,我知道我可以列出数据库中的表:

SHOW TABLES

但是,我想将这些表名插入到另一个表中,例如:

INSERT INTO metadata(table_name) SHOW TABLES /* does not work */

有没有办法使用标准的 SELECT 语句获取表名,例如:

INSERT INTO metadata(table_name) SELECT name FROM table_names /* what should table_names be? */

【问题讨论】:

标签: mysql


【解决方案1】:

查看数据库information_schema 中的表TABLES。它包含有关其他数据库中表的信息。但如果您使用的是共享主机,您可能无法访问它。

【讨论】:

    【解决方案2】:

    我认为您可以从 INFORMATION_SCHEMA TABLES 中获取您想要的数据。

    您可以在这里找到更多信息:http://dev.mysql.com/doc/refman/5.0/en/tables-table.html

    【讨论】:

      【解决方案3】:

      试试:

      select * from information_schema.tables
      

      见:http://dev.mysql.com/doc/refman/5.0/en/information-schema.html

      【讨论】:

      • 这指向了正确的方向,但并没有真正回答问题。可以详细说明。
      • @MuriloGarcia information_schema 是 SQL 标准的一部分。 Postgres 也有。对于 SQLite,请查看 sqlite_master
      • 使用 LIKE 按名称获取表:SELECT TABLE_NAME FROM information_schema.tables WHERE TABLE_NAME LIKE '%keyword%';
      【解决方案4】:

      除了使用 INFORMATION_SCHEMA 表之外,要使用 SHOW TABLES 插入表中,您可以使用以下方法

      <?php
       $sql = "SHOW TABLES FROM $dbname";
       $result = mysql_query($sql);
       $arrayCount = 0
       while ($row = mysql_fetch_row($result)) {
        $tableNames[$arrayCount] = $row[0];
        $arrayCount++; //only do this to make sure it starts at index 0
       }
       foreach ($tableNames as &$name {
        $query = "INSERT INTO metadata (table_name) VALUES ('".$name."')";
        mysql_query($query);
       }
      ?>
      

      【讨论】:

        【解决方案5】:

        要获取所有表的名称,请使用:

        SELECT table_name FROM information_schema.tables;
        

        要从特定数据库中获取表的名称,请使用:

        SELECT table_name FROM information_schema.tables
        WHERE table_schema = 'your_database_name';
        

        现在,要回答原始问题,请使用以下查询:

        INSERT INTO table_name
            SELECT table_name FROM information_schema.tables
                WHERE table_schema = 'your_database_name';
        

        更多详情见:http://dev.mysql.com/doc/refman/5.0/en/information-schema.html

        【讨论】:

          【解决方案6】:

          如果我们有多个数据库并且我们需要为特定数据库选择所有表,我们可以使用TABLE_SCHEMA 将数据库名称定义为:

          select table_name from information_schema.tables where TABLE_SCHEMA='dbname';

          【讨论】:

            【解决方案7】:

            要插入、更新和删除,请执行以下操作:

            $teste = array('LOW_PRIORITY', 'DELAYED', 'HIGH_PRIORITY', 'IGNORE', 'INTO', 'INSERT', 'UPDATE', 'DELETE', 'QUICK', 'FROM');
            $teste1 = array("\t", "\n", "\r", "\0", "\x0B");
            $strsql = trim(str_ireplace($teste1, ' ', str_ireplace($teste, '', $strsql)));
            $nomeTabela = substr($strsql, 0, strpos($strsql, ' '));
            
            print($nomeTabela);
            exit;
            

            【讨论】:

            • 我们在这里期待英语。但是,我们确实有一个葡萄牙语网站:pt.stackoverflow.com
            【解决方案8】:
            SELECT table_name 
            FROM information_schema.tables 
            WHERE table_schema = 'DATABASE'
            

            【讨论】:

            • 能否请您为您的答案添加更多上下文。仅代码的答案很难理解。如果您可以在帖子中添加更多信息,这将对提问者和未来的读者都有帮助。
            【解决方案9】:

            MySQL INFORMATION_SCHEMA.TABLES 表包含关于表(不是临时的而是永久的)和视图的数据。列TABLE_TYPE 定义这是表记录还是视图记录(表TABLE_TYPE='BASE TABLE' 和视图TABLE_TYPE='VIEW')。因此,如果您只想从架构(数据库)表中查看,则只有以下查询:

            SELECT *
            FROM information_schema.tables
            WHERE table_type='BASE TABLE'
            AND table_schema='myschema'
            

            【讨论】:

              【解决方案10】:

              还有另一种更简单的方法来获取表名

              SHOW TABLES FROM <database_name>
              

              【讨论】:

              • 这根本不能回答问题。
              • 在我搜索符合问题标题的内容时帮助了我。
              • 没有。这不好,因为它只显示 mysql 工具中的表。
              【解决方案11】:

              我认为指出,如果您想选择包含特定单词的表格,您可以使用SELECT(而不是SHOW)轻松完成,这可能会有所帮助。下面的查询很容易将搜索范围缩小到包含“关键字”的表

              SELECT *
              FROM information_schema.tables
              WHERE table_name like "%keyword%"
              

              【讨论】:

                【解决方案12】:

                以下查询对我有用。这可以显示数据库、表、列名、数据类型和列数。

                **select table_schema Schema_Name ,table_name TableName,column_name ColumnName,ordinal_position "Position",column_type DataType,COUNT(1) ColumnCount
                FROM information_schema.columns
                GROUP by table_schema,table_name,column_name,ordinal_position, column_type;**
                

                【讨论】:

                  【解决方案13】:

                  获取所有表的名称:

                  SELECT table_name 
                  FROM information_schema.tables;
                  

                  如果您需要为特定数据库获取它:

                  SELECT table_name 
                  FROM information_schema.tables
                  WHERE table_schema = 'your_db_name';
                  

                  输出:

                  +--------------------+
                  | table_name         |
                  +--------------------+
                  | myapp              |
                  | demodb             |
                  | cliquein           |
                  +--------------------+
                  3 rows in set (0.00 sec)
                  

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2011-09-08
                    • 2015-01-27
                    • 1970-01-01
                    • 1970-01-01
                    相关资源
                    最近更新 更多