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

MySQL 判斷欄位是否存在的三種方法:DESC、SHOW COLUMNS、DESCRIBE

     編輯:MySQL 綜合教學

場景

腳本遷移、動態 SQL、工具開發中,需在執行前檢查表是否包含某欄位。

方法一:DESC (最簡潔)

DESC `table_name` `column_name`;
-- 支援通配符
DESC `table_name` '%abc%';
  • ✅ 輸出精簡:存在顯示欄位定義,不存在報錯 ERROR 1105 (HY000): Unknown column。
  • ✅ 交互式快速確認首選。

方法二:SHOW COLUMNS (功能最全、可程式化解析)

SHOW COLUMNS FROM `table_name` LIKE 'column_name';
-- 通配符
SHOW COLUMNS FROM `table_name` LIKE '%abc%';
  • ✅ 返回標準結果集 (Field, Type, Null, Key, Default, Extra),便於應用層解析。
  • ✅ 不報錯,無欄位時返回空集 (Rows=0),邏輯判斷友好。
  • ✅ 可配合 WHERE 進階過濾 (需 8.0+ SHOW COLUMNS ... WHERE Field = 'col')。

方法三:DESCRIBE (DESC 別名,行為完全一致)

DESCRIBE `table_name` `column_name`;
DESCRIBE `table_name` '%abc%';
  • 同 DESC,單純喜好全拼寫法。

對比總結

指令輸出格式不存在時行為適合場景
DESC垂直表格報錯人工快速確認
SHOW COLUMNS標準結果集空集 (無錯誤)程式化檢查、腳本、工具
DESCRIBE垂直表格報錯同 DESC

進階:INFORMATION_SCHEMA 通用查詢 (跨庫/跨表批量檢查)

SELECT COLUMN_NAME, DATA_TYPE, COLUMN_COMMENT
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'db_name'
  AND TABLE_NAME = 'table_name'
  AND COLUMN_NAME = 'column_name';
  • ✅ 可一次檢查多庫多表,彙總報表。
  • ✅ 獲取完整元數據 (類型、註釋、權限等)。

應用層判斷邏輯 (以 Python 為例)

import pymysql

def column_exists(conn, db, table, column):
    with conn.cursor() as cur:
        cur.execute("""
            SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS
            WHERE TABLE_SCHEMA=%s AND TABLE_NAME=%s AND COLUMN_NAME=%s
        """, (db, table, column))
        return cur.fetchone() is not None

總結

  • **手工查** → DESC table col 最快。
  • **腳本/程式** → SHOW COLUMNS ... LIKE 或 INFORMATION_SCHEMA,無異常、可解析。
  • **批量巡檢** → INFORMATION_SCHEMA.COLUMNS 單條 SQL 搞定。

選對工具,讓 Schema 變更檢查既快又穩。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved