在MySQL中获取表列名称?


Answers:


536

您可以使用DESCRIBE

DESCRIBE my_table;

或者,在较新的版本中,您可以使用INFORMATION_SCHEMA

SELECT COLUMN_NAME
  FROM INFORMATION_SCHEMA.COLUMNS
  WHERE TABLE_SCHEMA = 'my_database' AND TABLE_NAME = 'my_table';

或者您可以使用SHOW COLUMNS

SHOW COLUMNS FROM my_table;

14
DESCRIBE实际上是SHOW COLUMNS快捷方式(dev.mysql.com/doc/refman/5.0/en/describe.html
svens

11
我会投票支持Information_Schema版本,因为大多数主要数据库都支持此语法。如果需要,最好只学习一种方法。
Kibbee

3
+1我想选择存在列的表名SELECT TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'db_name' AND COLUMN_NAME = 'col_name';
AL̲̳I 2014年

2
使用desc my_table;:-) 保存字节
阿方索·佩雷斯

3
DESC用于描述可以很容易地与DESC降序混淆。由于缺乏可读性而节省的名义字节数是不值得的。
雅克·马修

34

以下SQL语句几乎等效:

SELECT COLUMN_NAME
  FROM INFORMATION_SCHEMA.COLUMNS
 WHERE table_name = 'tbl_name'
  [AND table_schema = 'db_name']
  [AND column_name LIKE 'wild']

SHOW COLUMNS
FROM tbl_name
[FROM db_name]
[LIKE 'wild']

参考:INFORMATION_SCHEMA COLUMNS


1
你为什么说“近”?
Pacerier

2
@Pacerier一方面,第二个不能作为子查询。
WAF 2015年

@WAF,我认为他完全是指其他意思,不是那样。
Pacerier,2015年

2
在我的快速测试中,SHOW COLUMNS返回一个包含列名,类型等的表,而SELECT COLUMN NAME仅返回列名。
mwfearnley '16

20

我做了一个PDO函数,它以一个简单的数组返回所有列名。

public function getColumnNames($table){
    $sql = "SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = :table";
    try {
        $core = Core::getInstance();
        $stmt = $core->dbh->prepare($sql);
        $stmt->bindValue(':table', $table, PDO::PARAM_STR);
        $stmt->execute();
        $output = array();
        while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
            $output[] = $row['COLUMN_NAME'];                
        }
        return $output; 
    }

    catch(PDOException $pe) {
        trigger_error('Could not connect to MySQL database. ' . $pe->getMessage() , E_USER_ERROR);
    }
}

输出将是一个数组:

Array (
[0] => id
[1] => name
[2] => email
[3] => shoe_size
[4] => likes
... )

对不起坏死,但我喜欢我的功能;)

PS我没有包括Core类,但是您可以使用自己的类。


大写恋物癖是什么?
Pacerier

回答有关Stack Overflow的旧问题没有任何问题。
bdsl

1
谢谢。对于输出,我使用这种方式:$ columns = $ stmt-> fetchAll(\ PDO :: FETCH_ASSOC); 返回array_column($ columns,'COLUMN_NAME');
Ehsan

6

该解决方案是从命令行mysql

mysql>USE information_schema;

在下面的查询中,只需将<-DATABASE_NAME->更改为您的数据库,并将<-TABLENAME->更改为您只希望使用DESCRIBE语句的字段值的表名

mysql> SELECT COLUMN_NAME FROM COLUMNS WHERE TABLE_SCHEMA = '<--DATABASE_NAME-->' AND   TABLE_NAME='<--TABLENAME-->';


4

这个怎么样:

SELECT @cCommand := GROUP_CONCAT( COLUMN_NAME ORDER BY column_name SEPARATOR ',\n')
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_SCHEMA = 'my_database' AND TABLE_NAME = 'my_table';

SET @cCommand = CONCAT( 'SELECT ', @cCommand, ' from my_database.my_table;');
PREPARE xCommand from @cCommand;
EXECUTE xCommand;

4

有趣的是,您可以使用
EXPLAIN table_name, 虽然EXPLAIN更常用于获取有关查询执行计划的信息DESCRIBE table_nameSHOW COLUMNS FROM table_name但您可以使用。



3

MySQL函数describe table应该将您带到您要去的地方(将表名输入“ table”)。您必须对输出进行一些解析,但这很简单。我记得,如果执行该查询,通常会给您键值对的PHP查询结果访问函数将以列名作为键。但是自从我使用PHP已经有一段时间了,所以不要拘泥于此。:)



3

您可能还想签出mysql_fetch_array(),例如:

$rs = mysql_query($sql);
while ($row = mysql_fetch_array($rs)) {
//$row[0] = 'First Field';
//$row['first_field'] = 'First Field';
}

3

我需要列名作为平面数组,而其他答案返回关联数组,因此我使用了:

$con = mysqli_connect('localhost',$db_user,$db_pw,$db_name);
$table = 'people';

/**
* Get the column names for a mysql table
**/

function get_column_names($con, $table) {
  $sql = 'DESCRIBE '.$table;
  $result = mysqli_query($con, $sql);

  $rows = array();
  while($row = mysqli_fetch_assoc($result)) {
    $rows[] = $row['Field'];
  }

  return $rows;
}

$col_names = function get_column_names($con, $table);

$ col_names现在等于:

(
    [0] => name
    [1] => parent
    [2] => number
    [3] => chart_id
    [4] => type
    [5] => id
)

2

mysql_list_fields功能可能会让您感兴趣;但是,正如手册所述:

不推荐使用此功能。最好是使用mysql_query()发出SQL SHOW COLUMNS FROM table [LIKE 'name']语句代替。


如果不向服务器发出SQL查询,该函数如何工作?为什么不推荐使用它?
Pacerier

2

您可以使用以下简单命令获取整个表结构。

DESC TableName

或者您可以使用以下查询。

SHOW COLUMNS FROM TableName

2

在mysql中通过跟随关键字或查询来获取列详细信息和表结构

1。DESC table_name

2。DESCRIBE table_name

3。SHOW COLUMNS FROM table_name

4。SHOW create table table_name;

5,EXPLAIN table_name


2
$col = $db->query("SHOW COLUMNS FROM category");

while ($fildss = $col->fetch_array())
{             
    $filds[] = '"{'.$fildss['Field'].'}"';
    $values[] = '$rows->'.$fildss['Field'].'';
}

if($type == 'value')
{
    return $values = implode(',', $values);
}
else {
     return $filds = implode(',', $filds);
}

1
为了对将来的用户有更多帮助,请您提供一些答案的上下文,而不仅仅是代码转储。
Paul Zahra

1

这对我有用。

$sql = "desc MyTableName";
$result = @mysql_query($sql);
while($row = @mysql_fetch_array($result)){
    echo $row[0]."<br>";
}

1

我已经编写了一个简单的PHP脚本来通过PHP获取表列: Show_table_columns.php

<?php
$db = 'Database'; //Database name
$host = 'Database_host'; //Hostname or Server ip
$user = 'USER'; //Database user
$pass = 'Password'; //Database user password
$con = mysql_connect($host, $user, $pass);
if ($con) {
    $link = mysql_select_db($db) or die("no database") . mysql_error();
    $count = 0;
    if ($link) {
        $sql = "
            SELECT column_name
            FROM   information_schema.columns
            WHERE  table_schema = '$db'
                   AND table_name = 'table_name'"; // Change the table_name your own table name
        $result = mysql_query($sql, $con);
        if (mysql_query($sql, $con)) {
            echo $sql . "<br> <br>";
            while ($row = mysql_fetch_row($result)) {
                echo "COLUMN " . ++$count . ": {$row[0]}<br>";
                $table_name = $row[0];
            }
            echo "<br>Total No. of COLUMNS: " . $count;
        } else {
            echo "Error in query.";
        }
    } else {
        echo "Database not found.";
    }
} else {
    echo "Connection Failed.";
}
?>

请享用!


1
请在此处发布实际答案,并且仅将要点用作备份/参考
ChrisF

0

mysqli fetch_field()为我工作:

if ($result = $mysqli -> query($sql)) {
  // Get field information for all fields
  while ($fieldinfo = $result -> fetch_field()) {
    printf("Name: %s\n", $fieldinfo -> name);
    printf("Table: %s\n", $fieldinfo -> table);
    printf("Max. Len: %d\n", $fieldinfo -> max_length);
  }
  $result -> free_result();
}

资料来源:https : //www.w3schools.com/pHP/func_mysqli_fetch_field.asp

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.