MySQL--INFORMATION_SCHEMA COLUMNS表
在程序中,若想要动态地得到某一个表的具体信息,就使用到了MySQL 中的 INFORMATION_SCHEMA 信息数据库,而它又包含很多表,见下:
INFORMATION_SCHEMA SCHEMATA表INFORMATION_SCHEMA TABLES表INFORMATION_SCHEMA COLUMNS表INFORMATION_SCHEMA STATISTICS表INFORMATION_SCHEMA USER_PRIVILEGES表INFORMATION_SCHEMA SCHEMA_PRIVILEGES表INFORMATION_SCHEMA TABLE_PRIVILEGES表INFORMATION_SCHEMA COLUMN_PRIVILEGES表INFORMATION_SCHEMA CHARACTER_SETS表INFORMATION_SCHEMA COLLATIONS表INFORMATION_SCHEMA COLLATION_CHARACTER_SET_APPLICABILITY表INFORMATION_SCHEMA TABLE_CONSTRAINTS表INFORMATION_SCHEMA KEY_COLUMN_USAGE表INFORMATION_SCHEMA ROUTINES表INFORMATION_SCHEMA VIEWS表INFORMATION_SCHEMA TRIGGERS表 |
其中的 COLUMNS 表给出了某一个表中的具体的列信息:我们在 'test' 库中建立 'documents' 表,语句如下:
CREATE TABLE `documents` ( `id` int(11) NOT NULL auto_increment, `group_id` int(11) NOT NULL, `group_id2` int(11) NOT NULL, `date_added` datetime NOT NULL, `title` varchar(255) NOT NULL, `content` text NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=gbk |
字段以及索引信息为:
/*字段信息 - test.documents*/-----------------------------Field Type Collation Null Key Default Extra Privileges Comment---------- ------------ -------------- ------ ------ ------- -------------- ------------------------------- -------id int(11) (NULL) NO PRI (NULL) auto_increment select,insert,update,references group_id int(11) (NULL) NO select,insert,update,references group_id2 int(11) (NULL) NO select,insert,update,references date_added datetime (NULL) NO select,insert,update,references title varchar(255) gbk_chinese_ci NO select,insert,update,references content text gbk_chinese_ci NO select,insert,update,references /*索引信息 - test.documents*/-----------------------------Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment--------- ---------- -------- ------------ ----------- --------- ----------- -------- ------ ------ ---------- -------documents 0 PRIMARY 1 id A 4 (NULL) (NULL) BTREE |
|
好啦!建表结束!先来了解一下 INFORMATION_SCHEMA COLUMNS 表:

下面我们开始了解它!键入 SQL 语句:
SELECT COLUMN_NAME, DATA_TYPE, IS_NULLABLE, COLUMN_DEFAULT FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = 'documents' |
结果如下,可以对照我们刚开始的建表语句以及字段信息:

当然,还可以参照如下格式的 SQL 语句来查看其他字段的查询信息:
SELECT COLUMN_NAME, DATA_TYPE, IS_NULLABLE, COLUMN_DEFAULT FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = 'tbl_name' [AND table_schema = 'db_name'] [AND column_name LIKE 'wild'] |
接下来看看 SHOW 语句和它的异同:键入 SQL 语句:
SHOW COLUMNS FROM `documents` |
结果如下:

SHOW 语句的基本格式为:
SHOW COLUMNS FROM tbl_name [FROM db_name] [LIKE wild] |
更多详细的内容,请参看 MySQL 手册。
人的一生应该这样度过:当他回首往事的时候,不会因为虚度年华而悔恨,也不会因为碌碌无为而羞愧。
查询mysql数据库中一个拥有65个字段的表的数据,而且还得将字段的注释查出来,当时看到这个头就大了,不知道如何下手,(不过我从没想过将 65个字段全写在select后面一遍,这简直太惨绝人寰了) 后来得到了同事的帮助,教我使用information_schema(mysql的架构信息库),简单的一个sql就解决了这个问题,大致是这样的:
SELECT COLUMN_NAME AS '字段名',COLUMN_COMMENT AS '字段注释',DATA_TYPE AS '字段类型' FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA='database_name' AND TABLE_NAME='table_name' AND COLUMN_COMMENT !='' AND COLUMN_COMMENT != '未使用'
这样就解决了大量字段值的查询问题。

浙公网安备 33010602011771号