• 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 != '未使用'

    这样就解决了大量字段值的查询问题。
     
     
     
  • 相关阅读:
    十五周学习笔记
    十四周学习笔记
    程序员修炼之道二
    程序员修炼之道
    构建之法十七
    十三周学习笔记总结
    个人课程总结
    构建之法十六
    构建之法十二
    文章单词统计接龙
  • 原文地址:https://www.cnblogs.com/wolfplan/p/4944621.html
Copyright © 2020-2023  润新知