在腳本或程式中動態檢查資料表是否包含某欄位,常用以下三種等效指令:
DESC `table_name` `column_name`;
DESC `table_name` '%pattern%'; -- 支援萬用字元
若欄位存在,回傳欄位定義;不存在則回傳 Empty set。
SHOW COLUMNS FROM `table_name` LIKE 'column_name';
SHOW COLUMNS FROM `table_name` LIKE '%pattern%';
輸出格式與 DESC 相同,支援 LIKE 模糊匹配。
DESCRIBE `table_name` `column_name`;
DESCRIBE `table_name` '%pattern%';
DESCRIBE 是 SHOW COLUMNS FROM 的別名,行為完全一致。
if mysql -u root -p'pwd' -N -e "SHOW COLUMNS FROM db.tbl LIKE 'col'" | grep -q 'col'; then
echo "Column exists"
else
echo "Column NOT exists"
fi
DELIMITER $$
CREATE PROCEDURE check_col(IN tbl VARCHAR(64), IN col VARCHAR(64))
BEGIN
DECLARE cnt INT DEFAULT 0;
SELECT COUNT(*) INTO cnt
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = tbl AND COLUMN_NAME = col;
SELECT IF(cnt > 0, 'EXISTS', 'NOT EXISTS') AS result;
END$$
DELIMITER ;
資訊庫查詢最標準、跨版本相容,建議在程式碼中使用。
| 指令 | 支援萬用字元 | 適用場景 |
|---|---|---|
| DESC / DESCRIBE | 是 | 快速互動檢查 |
| SHOW COLUMNS | 是 | 腳本/程式解析輸出 |
| INFORMATION_SCHEMA.COLUMNS | 否(需自行 LIKE) | 嚴謹程式邏輯、存儲過程 |