DESCRIBE(可縮寫 DESC)是 MySQL 查看表結構最常用的命令,等同於 SHOW COLUMNS FROM。本文系統整理其用法、輸出欄位含義、進階過濾技巧、程式化判斷欄位是否存在。
DESCRIBE guestbook; -- 或 DESC guestbook;
DESCRIBE guestbook id; DESC ol_user username;
DESCRIBE tbl_name 'col_%'; -- 匹配 col_ 開頭的欄位 DESCRIBE tbl_name 'id%'; -- 匹配 id 開頭
支援 %(任意字符)和 _(單字符)通配符,無需引號。
mysql> DESC ol_user username\G *************************** 1. row *************************** Field: UserName -- 欄位名 Type: varchar(100) -- 數據類型及長度 Null: NO -- 是否允許 NULL(NO/YES) Key: MUL -- 索引類型:PRI=主鍵、UNI=唯一、MUL=非唯一索引 Default: -- 默認值(無則為空) Extra: -- 額外信息:auto_increment、on update CURRENT_TIMESTAMP 等 1 row in set (0.02 sec)
| Key 值 | 含義 |
|---|---|
| PRI | Primary Key(主鍵) |
| UNI | Unique Index(唯一索引) |
| MUL | Non-unique Index(普通索引,允許重複值) |
| (空) | 無索引 |
SHOW COLUMNS FROM tbl_name [FROM db_name]; SHOW COLUMNS FROM db_name.tbl_name;
功能完全相同,DESCRIBE 為標準 SQL 簡寫,更常用。
mysql_connect('localhost', 'root', 'root');
mysql_select_db('demo');
$result = mysql_query('DESCRIBE cdb_posts first');
$row = mysql_fetch_array($result);
if ($row && $row[0] === 'first') {
echo "欄位 first 存在";
} else {
echo "欄位 first 不存在"; // $row 為 false 或 $row[0] 為 NULL
}
原理:DESCRIBE 若欄位不存在返回空結果集,mysql_fetch_array 返回 false。
DESCRIBE tbl_name\G:垂直顯示,適合欄位多的表SHOW CREATE TABLE tbl_name:查看完整建表 SQL(含引擎、字元集、分區、外鍵等)SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='db' AND TABLE_NAME='tbl':程式化獲取豐富元數據grep 過濾:mysql -e "DESC db.tbl" | grep -i 'pri\|uni' 快速找主鍵/唯一鍵