zoukankan      html  css  js  c++  java
  • 十、information_schema.tables基础应用

    元数据获取

    除了数据行其他的类属性表属性都属于元数据,存放在InnoDB引擎的Inode中,一个Inode就是代表一个数据段。.
    元素据是被保护起来的,是无法被直接操作的,但可以通过专用的视图以及命令对元数据进行查询。

    参考资料: mysql体系结构

    什么是视图

    在这里,视频中视图相当于封装了一段sql语句,方便以后查询。

    mysql> select teacher.tname,course.cname,student.sname,score.score
        -> from student
        -> join score
        -> on student.sno=score.sno
        -> join course
        -> on score.cno=course.cno
        -> join teacher
        -> on course.tno=teacher.tno
        -> where teacher.tname='oldguo'
        -> having score.score < 60;
    +--------+-------+-------+-------+
    | tname  | cname | sname | score |
    +--------+-------+-------+-------+
    | oldguo | mysql | li4   |    40 |
    | oldguo | mysql | zh4   |    40 |
    +--------+-------+-------+-------+
    2 rows in set (0.00 sec)
    
    #创建一个名为check_score的视图
    mysql> create view check_score as select teacher.tname,course.cname,student.sname,score.score
        -> from student
        -> join score
        -> on student.sno=score.sno
        -> join course
        -> on score.cno=course.cno
        -> join teacher
        -> on course.tno=teacher.tno
        -> where teacher.tname='oldguo'
        -> having score.score < 60;
    Query OK, 0 rows affected (0.00 sec)
    
    #使用check_score视图
    mysql> select * from check_score;
    +--------+-------+-------+-------+
    | tname  | cname | sname | score |
    +--------+-------+-------+-------+
    | oldguo | mysql | li4   |    40 |
    | oldguo | mysql | zh4   |    40 |
    +--------+-------+-------+-------+
    2 rows in set (0.00 sec)
    

    参考资料: 什么是视图

    information_schema库

    该库保存了大量的对元数据进行查询的视图,视图相当于是虚拟的表。
    例如其中常用的表tables保存了所有数据库的名字以及表名

    mysql> use information_schema;
    
    mysql> show tables;
    +---------------------------------------+
    | Tables_in_information_schema          |
    +---------------------------------------+
    | CHARACTER_SETS                        |
    | COLLATIONS                            |
    | COLLATION_CHARACTER_SET_APPLICABILITY |
    | COLUMNS                               |
    | COLUMN_PRIVILEGES                     |
    | ENGINES                               |
    | EVENTS                                |
    | FILES                                 |
    | GLOBAL_STATUS                         |
    | GLOBAL_VARIABLES                      |
    | KEY_COLUMN_USAGE                      |
    | OPTIMIZER_TRACE                       |
    | PARAMETERS                            |
    | PARTITIONS                            |
    | PLUGINS                               |
    | PROCESSLIST                           |
    | PROFILING                             |
    | REFERENTIAL_CONSTRAINTS               |
    | ROUTINES                              |
    | SCHEMATA                              |
    | SCHEMA_PRIVILEGES                     |
    | SESSION_STATUS                        |
    | SESSION_VARIABLES                     |
    | STATISTICS                            |
    | TABLES                                |
    | TABLESPACES                           |
    | TABLE_CONSTRAINTS                     |
    | TABLE_PRIVILEGES                      |
    | TRIGGERS                              |
    | USER_PRIVILEGES                       |
    | VIEWS                                 |
    | INNODB_LOCKS                          |
    | INNODB_TRX                            |
    | INNODB_SYS_DATAFILES                  |
    | INNODB_FT_CONFIG                      |
    | INNODB_SYS_VIRTUAL                    |
    | INNODB_CMP                            |
    | INNODB_FT_BEING_DELETED               |
    | INNODB_CMP_RESET                      |
    | INNODB_CMP_PER_INDEX                  |
    | INNODB_CMPMEM_RESET                   |
    | INNODB_FT_DELETED                     |
    | INNODB_BUFFER_PAGE_LRU                |
    | INNODB_LOCK_WAITS                     |
    | INNODB_TEMP_TABLE_INFO                |
    | INNODB_SYS_INDEXES                    |
    | INNODB_SYS_TABLES                     |
    | INNODB_SYS_FIELDS                     |
    | INNODB_CMP_PER_INDEX_RESET            |
    | INNODB_BUFFER_PAGE                    |
    | INNODB_FT_DEFAULT_STOPWORD            |
    | INNODB_FT_INDEX_TABLE                 |
    | INNODB_FT_INDEX_CACHE                 |
    | INNODB_SYS_TABLESPACES                |
    | INNODB_METRICS                        |
    | INNODB_SYS_FOREIGN_COLS               |
    | INNODB_CMPMEM                         |
    | INNODB_BUFFER_POOL_STATS              |
    | INNODB_SYS_COLUMNS                    |
    | INNODB_SYS_FOREIGN                    |
    | INNODB_SYS_TABLESTATS                 |
    +---------------------------------------+
    61 rows in set (0.00 sec)
    
    #查看tables表结构
    mysql> desc tables;
    +-----------------+---------------------+------+-----+---------+-------+
    | Field           | Type                | Null | Key | Default | Extra |
    +-----------------+---------------------+------+-----+---------+-------+
    | TABLE_CATALOG   | varchar(512)        | NO   |     |         |       |
    | TABLE_SCHEMA    | varchar(64)         | NO   |     |         |       |
    | TABLE_NAME      | varchar(64)         | NO   |     |         |       |
    | TABLE_TYPE      | varchar(64)         | NO   |     |         |       |
    | ENGINE          | varchar(64)         | YES  |     | NULL    |       |
    | VERSION         | bigint(21) unsigned | YES  |     | NULL    |       |
    | ROW_FORMAT      | varchar(10)         | YES  |     | NULL    |       |
    | TABLE_ROWS      | bigint(21) unsigned | YES  |     | NULL    |       |
    | AVG_ROW_LENGTH  | bigint(21) unsigned | YES  |     | NULL    |       |
    | DATA_LENGTH     | bigint(21) unsigned | YES  |     | NULL    |       |
    | MAX_DATA_LENGTH | bigint(21) unsigned | YES  |     | NULL    |       |
    | INDEX_LENGTH    | bigint(21) unsigned | YES  |     | NULL    |       |
    | DATA_FREE       | bigint(21) unsigned | YES  |     | NULL    |       |
    | AUTO_INCREMENT  | bigint(21) unsigned | YES  |     | NULL    |       |
    | CREATE_TIME     | datetime            | YES  |     | NULL    |       |
    | UPDATE_TIME     | datetime            | YES  |     | NULL    |       |
    | CHECK_TIME      | datetime            | YES  |     | NULL    |       |
    | TABLE_COLLATION | varchar(32)         | YES  |     | NULL    |       |
    | CHECKSUM        | bigint(21) unsigned | YES  |     | NULL    |       |
    | CREATE_OPTIONS  | varchar(255)        | YES  |     | NULL    |       |
    | TABLE_COMMENT   | varchar(2048)       | NO   |     |         |       |
    +-----------------+---------------------+------+-----+---------+-------+
    21 rows in set (0.01 sec)
    

    常用的表为TABLES
    常用的列如下所示

    TABLE_SCHEMA        #表所在的库名
    TABLE_NAME			#表名
    ENGINE				#存储引擎
    TABLE_ROWS			#数据行
    AVG_ROW_LENGTH		#平均行长度
    INDEX_LENGTH        #索引长度
    

    案例

    #查看所有数据库的表名
    mysql> select table_schema,table_name from information_schema.tables;
    #仅显示部分
    +--------------------+------------------------------------------------------+
    | table_schema       | table_name                                           |
    +--------------------+------------------------------------------------------+
    | school             | check_score                                          |
    | school             | course                                               |
    | school             | score                                                |
    | school             | student                                              |
    | school             | teacher                                              |
    | school             | test                                                 |
    +--------------------+------------------------------------------------------+
    
    #一行显示每个数据库的表名
    select table_schema,GROUP_CONCAT(table_name) as tables 
    from information_schema.tables 
    group by table_schema;
    
    #查询所有innodb引擎的表
    select table_schema,table_name,engine 
    from information_schema.tables
    where ENGINE='innodb';
    
    #统计school数据库中course表占用空间大小
    #公式:平均行长度*行数+索引长度
    select table_name,concat(((avg_row_length*table_rows+index_length)/1024),'kb') as size
    from information_schema.tables
    where table_schema='school' and table_name='course';
    +------------+-----------+
    | table_name | size      |
    +------------+-----------+
    | course     | 15.9990kb |
    +------------+-----------+
    1 row in set (0.00 sec)
    
    #求school库所有表总大小
    select table_schema,concat((sum(avg_row_length*table_rows+index_length)/1024),'kb') as size
    from information_schema.tables
    where table_schema='school' ;
    +--------------+-----------+
    | table_schema | size      |
    +--------------+-----------+
    | school       | 79.9814kb |
    +--------------+-----------+
    1 row in set (0.00 sec)
    
    #统计每个数据库的大小,并从大到小排序
    select table_schema,concat((sum(avg_row_length*table_rows+index_length)/1024),'kb') as size
    from information_schema.tables 
    group by table_schema
    order by size desc;
    +--------------------+-------------+
    | table_schema       | size        |
    +--------------------+-------------+
    | school             | 79.9814kb   |
    | mysql              | 2307.5078kb |
    | sys                | 15.9961kb   |
    | performance_schema | 0.0000kb    |
    | information_schema | NULL        |
    +--------------------+-------------+
    5 rows in set (6.15 sec)
    #注意information_schema是一个虚拟库所以不占空间,每次数据库启动就会自动生成。
    

    对数据库进行备份
    可使用mysqldump工具对mysql数据库进行备份

    #对school数据库中的student表进行备份
    mysqldump -uroot -p123 school student >/bak/school_student.sql
    
    #concat拼接语句如下
    select concat("mysqldump -uroot -p123 ",table_schema," ",table_name
    ," >/bak/",table_schema,"_",table_name,".sql")
    from information_schema.tables;
    
    #仅备份school库所有表
    select concat("mysqldump -uroot -p123 ",table_schema," ",table_name
    ," >/bak/",table_schema,"_",table_name,".sql")
    from information_schema.tables
    where information_schema.tables.TABLE_SCHEMA='school';
    
    +----------------------------------------------------------------------------------+
    | concat("mysqldump -uroot -p123 ",table_schema," ",table_name
    ," >/bak/",table_schema,"_",table_name,".sql") |
    +----------------------------------------------------------------------------------+
    | mysqldump -uroot -p123 school check_score >/bak/school_check_score.sql           |
    | mysqldump -uroot -p123 school course >/bak/school_course.sql                     |
    | mysqldump -uroot -p123 school score >/bak/school_score.sql                       |
    | mysqldump -uroot -p123 school student >/bak/school_student.sql                   |
    | mysqldump -uroot -p123 school teacher >/bak/school_teacher.sql                   |
    | mysqldump -uroot -p123 school test >/bak/school_test.sql                         |
    +----------------------------------------------------------------------------------+
    6 rows in set (0.00 sec)
    

    使用show命令

    #查看帮助
    mysql> help show;
    
    #常用的show命令
    show databases;        		            #查看数据库名
    show tables; 		   		            #查看表名
    show create database xx;  	            #查看建库语句
    show create table table_name;	        #查看建表语句
    show processlist;			            #查看所有用户连接情况
    show charset;				            #查看支持的字符集
    show collation;				            #查看所有支持的校对规则
    show grants for root;			        #查看用户的权限信息
    show variables like '%xx%'              #查看参数信息
    show engines;				            #查看所有支持的存储引擎类型
    show index from table_name;		        #查看表的索引信息
    show engine innodb statusG;            #查看innoDB引擎详细状态信息
    show binary logs; 			            #查看二进制日志的列表信息
    show binlog events in '日志文件名';	    #查看二进制日志的事件信息
    show master status;		                #查看mysql当前使用二进制日志信息
    show slave statusG; 		            #查看从库状态信息
    show relaylog events in '日志文件名';	    #查看中继日志的事件信息
    show status like '';			        #查看数据库整体状态信息
    

    将sql导出保存为文件

    在mysql中可以将sql语句导出到文件中,但mysql会检查导出目录的安全性,需要在配置文件中设置安全目录路径

    修改配置文件,设置安全目录

    $ vim /etc/my.cnf
    [mysqld]
    #可以为空,表示可以导出到任何目录中
    secure-file-priv=
    

    使用concat连接sql语句导出到文件

    mysql> select concat("alter table ",table_schema," ",table_name," discard tablespace;")  
    from information_schema.tables where table_schema='world'  
    into outfile '/tmp/world.sql'
    
    #应用
    mysql> source /tmp/world.sql
    

    导出数据到文件

    #数据一般使用excle表格式,csv或者xlsx格式
    mysql> select * from city into outfile '/tmp/city.xlsx';
    

    学习来自:郭老师博客,老男孩深标DBA课程 第三章

    今天的学习是为了以后的工作更加的轻松!
  • 相关阅读:
    江城子 -- 地信四十二帅图
    Oracle11g配置st_geometry
    Thinkpad X1 Carbon 6th(2018)更换电池
    C#子线程更新主线程控件方法汇总
    在启用了Hyper-V的主机上运行 VM Workstation
    ArcGIS创建要素提示表已经被注册(Table already registered)
    WIN10安装Linux子系统以及设置
    Apache Tomcat 版本说明
    WindowsTerminal设置
    操作系统、软件版本号说明
  • 原文地址:https://www.cnblogs.com/tz90/p/14399443.html
Copyright © 2011-2022 走看看