腳本遷移、動態 SQL、工具開發中,需在執行前檢查表是否包含某欄位。
DESC `table_name` `column_name`;
-- 支援通配符
DESC `table_name` '%abc%';
ERROR 1105 (HY000): Unknown column。SHOW COLUMNS FROM `table_name` LIKE 'column_name';
-- 通配符
SHOW COLUMNS FROM `table_name` LIKE '%abc%';
WHERE 進階過濾 (需 8.0+ SHOW COLUMNS ... WHERE Field = 'col')。DESCRIBE `table_name` `column_name`;
DESCRIBE `table_name` '%abc%';
DESC,單純喜好全拼寫法。| 指令 | 輸出格式 | 不存在時行為 | 適合場景 |
|---|---|---|---|
| DESC | 垂直表格 | 報錯 | 人工快速確認 |
| SHOW COLUMNS | 標準結果集 | 空集 (無錯誤) | 程式化檢查、腳本、工具 |
| DESCRIBE | 垂直表格 | 報錯 | 同 DESC |
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';
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 變更檢查既快又穩。