首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 獲取資料表所有欄位名的三種方法:information_schema、SHOW COLUMNS、驅動層 API

     編輯:MySQL 綜合教學

方法一:查詢 information_schema.COLUMNS(標準、跨資料庫)


-- 指定資料庫與表
SELECT COLUMN_NAME
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = 'db_name' AND TABLE_NAME = 'tbl_name'
ORDER BY ORDINAL_POSITION;
  • 可加 DATA_TYPE、COLUMN_TYPE、IS_NULLABLE、COLUMN_KEY、COLUMN_DEFAULT、EXTRA 等欄位獲取完整定義。
  • 跨資料庫、跨實例(連線許可)通用。

方法二:SHOW COLUMNS / DESC(簡潔、Session 級)


SHOW COLUMNS FROM tbl_name;
SHOW COLUMNS FROM db_name.tbl_name;
DESC tbl_name;  -- 別名
  • 輸出:Field、Type、Null、Key、Default、Extra。
  • 僅限當前連線資料庫或指定庫.表。

方法三:應用層驅動 API(程式碼中獲取)

JDBC (Java)


DatabaseMetaData meta = conn.getMetaData();
ResultSet rs = meta.getColumns(null, "db_name", "tbl_name", "%");
while (rs.next()) {
    String colName = rs.getString("COLUMN_NAME");
    String colType = rs.getString("TYPE_NAME");
    int nullable = rs.getInt("NULLABLE");
}

Python (PyMySQL / mysql-connector)


cursor.execute("SELECT * FROM tbl_name LIMIT 0")
columns = [desc[0] for desc in cursor.description]
# 或
cursor.execute("SHOW COLUMNS FROM tbl_name")
columns = [row[0] for row in cursor.fetchall()]

PHP (mysqli / PDO)


// mysqli
$result = $mysqli->query("SELECT * FROM tbl_name LIMIT 0");
$fields = $result->fetch_fields();
foreach ($fields as $field) { echo $field->name; }

// PDO
$stmt = $pdo->query("SELECT * FROM tbl_name LIMIT 0");
for ($i=0; $i<$stmt->columnCount(); $i++) {
    $meta = $stmt->getColumnMeta($i);
    echo $meta['name'];
}

對比選擇建議

場景推薦方法
SQL 腳本/工具/跨庫information_schema.COLUMNS
命令行快速查看SHOW COLUMNS / DESC
應用程式動態獲取驅動層 Metadata API
需完整定義(類型、預設、註釋)information_schema.COLUMNS

常見坑

  • information_schema 查詢大量表時較慢,可加 TABLE_SCHEMA 過濾。
  • 權限:需 SELECT 權限於 information_schema 或該表。
  • 驅動層 LIMIT 0 技巧不觸發全表掃描,僅獲取元數據。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved