自動目錄
列出資料表詳細資料
要看資料表的狀態,不是結構喔,以前我都會用 procedure analyse(),但這個語法很難記,每次都要查。
SELECT `colname` FROM `tablename` PROCEDURE ANALYSE ( ) ;
例如我想分析整個table `log` 的欄位:
SELECT * FROM LOGS PROCEDURE ANALYSE ( ) ;
結果如下表,只列出部分:
Field_name | Min_value | Max_value | Min_length | Max_length | Empties_or_zeros | Nulls |
---|---|---|---|---|---|---|
netscreen.logs.dayid | 1283904003 | 1284463504 | 10 | 10 | 0 | 0 |
netscreen.logs.recordid | 1 | 138070 | 1 | 6 | 0 | 0 |
netscreen.logs.elapsed | 0 | 0 | 1 | 1 | 89099 | 0 |
netscreen.logs.timereceived | 2010-09-08 00:00:03 | 2010-09-14 11:25:04 | 19 | 19 | 0 | 0 |
netscreen.logs.timegenerated | 2010-09-08 15:09:00 | 2010-09-14 11:09:59 | 19 | 19 | 0 | 0 |
netscreen.logs.originaladdr | 192.168.2.37 | 192.168.2.37 | 12 | 12 | 0 | 0 |
Avg_value_or_avg_length | Std | Optimal_fieldtype |
---|---|---|
1284031444.1070 | 0.0000 | INT(10) UNSIGNED NOT NULL |
69715.3704 | 78711.1853 | MEDIUMINT(6) UNSIGNED NOT NULL |
0.0000 | 0.0000 | ENUM('0') NOT NULL |
19.0000 | NULL | DATETIME NOT NULL |
19.0000 | NULL | DATETIME NOT NULL |
12.0000 | NULL | ENUM('192.168.2.37') NOT NULL |
使用SHOW TABLE
這近同事教我一個方法:
SHOW TABLE STATUS;
SHOW TABLE STATUS WHERE name='table-name';
SHOW TABLE STATUS WHERE name like '%table-name%';
例如我有兩個表 `logs`, `summary` ,下達 SHOW TABLE STATUS; 結果如下:
Name | Engine | Version | Row_format | Rows | Avg_row_length | Data_length | Max_data_length | Index_length | Data_free |
---|---|---|---|---|---|---|---|---|---|
logs | MyISAM | 10 | Dynamic | 89026 | 172 | 15314668 | 281474976710655 | 1058816 | 0 |
summary | MyISAM | 10 | Dynamic | 2 | 40 | 80 | 281474976710655 | 2048 | 0 |
Auto_increment | Create_time | Update_time | Check_time | Collation | Checksum | Create_options | Comment |
---|---|---|---|---|---|---|---|
NULL | 2010-09-08 15:46:16 | 2010-09-14 10:58:23 | NULL | utf8_bin | NULL | ||
NULL | 2010-09-09 11:12:35 | 2010-09-14 10:58:23 | NULL | utf8_bin | NULL |
列出表格中的詳細情況
當然,簡單版的用desc,可以列出表格中的欄位情況:
desc `tablename`;
Field | Type | Null | Key | Default | Extra |
---|---|---|---|---|---|
dayid | int(11) | NO | NULL |
|
|
recordid | int(11) | NO | PRI | NULL |
上面也可以改用下面的語法,結果是一樣的
show columns from `tablename`;
explain `tablename`;
列出建立的SQL語法
SHOW create table `tablename`;
只列出欄名
如果只想列出欄位名稱,可用一個可特別的語法,說起來沒什麼邏輯
SELECT column_name FROM information_schema.columns WHERE table_name = 'mytable' AND table_schema = 'mydatabase';
參考資料
編修原文 2010-09-14 10:51:16