(转)十分钟了结MySQL information_schema

论坛 期权论坛     
选择匿名的用户   2021-6-1 16:14   274   0
<div class="blogpost-body" id="cnblogs_post_body">
<h1 class="postTitle"><a class="postTitle2" href="http://www.cnblogs.com/shengdimaya/p/6920677.html" id="cb_post_title_url">十分钟了结MySQL information_schema</a></h1>
<div class="clear">
   原文:http://www.cnblogs.com/shengdimaya/p/6920677.html
</div>
<div class="postBody">
  <div>
   <div>
    information_schema数据库是MySQL系统自带的数据库,它提供了数据库元数据的访问方式。感觉information_schema就像是MySQL实例的一个百科全书,记录了数据库当中大部分我们需要了结的信息,比如字符集,权限相关,数据库实体对象信息,外检约束,分区,压缩表,表信息,索引信息,参数,优化,锁和事物等等。通过information_schema我们可以窥透整个MySQL实例的运行情况,可以了结MySQL实例的基本信息,甚至优化调优,维护数据库等,可以说是真正的一部百科全书啊哈哈。
   </div>
   <div>
    下面就是根据自己学习的一些小小经验将这些表进行一个大体的分类,方便大家了结,要是有不足的地方请指出,我会尽快修改。
   </div>
   <div>
    <strong>1:关于字符集和排序规则相关的系统表</strong>
   </div>
   <div>
    CHARACTER_SETS :存储数据库相关字符集信息(memory存储引擎)
   </div>
   <div>
    COLLATIONS :字符集对应的排序规则
   </div>
   <div>
    COLLATION_CHARACTER_SET_APPLICABILITY:就是一个字符集和连线校对的一个对应关系而已
   </div>
   <div>
    下面我们说一下character sets和collations的区别:
   </div>
   <div>
    字符集(character sets)存储字符串,是指人类语言中最小的表义符号。例如’A&#39;、’B&#39;等;
   </div>
   <div>
    排序规则(collations)规则比较字符串,collations是指在同一字符集内字符之间的比较规则
   </div>
   <div>
    每个字符序唯一对应一种字符集,但一个字符集可以对应多种字符序,其中有一个是默认字符序(Default Collation)
   </div>
   <div>
     MySQL中的字符序名称遵从命名惯例:以字符序对应的字符集名称开头;以_ci(表示大小写不敏感)、_cs(表示大小写敏感)或_bin(表示按编码值比较)结尾。例如:在字符序“utf8_general_ci”下,字符“a”和“A”是等价的
   </div>
   <div>
    看一下有关于字符集和校对相关的MySQL变量:
   </div>
   <div>
    character_set_server:默认的内部操作字符集
   </div>
   <div>
    character_set_client:客户端来源数据使用的字符集
   </div>
   <div>
    character_set_connection:连接层字符集
   </div>
   <div>
    character_set_results:查询结果字符集
   </div>
   <div>
    character_set_database:当前选中数据库的默认字符集
   </div>
   <div>
    character_set_system:系统元数据(字段名等)字符集
   </div>
   <div>
    再看一下MySQL中的字符集转换过程:
   </div>
   <div>
    (1). MySQL Server收到请求时将请求数据从character_set_client转换为character_set_connection;
   </div>
   <div>
    (2). 进行内部操作前将请求数据从character_set_connection转换为内部操作字符集,其确定方法如下:
   </div>
   <div>
    使用每个数据字段的CHARACTER SET设定值;
   </div>
   <div>
    若上述值不存在,则使用对应数据表的DEFAULT CHARACTER SET设定值(MySQL扩展,非SQL标准);
   </div>
   <div>
    若上述值不存在,则使用对应数据库的DEFAULT CHARACTER SET设定值;
   </div>
   <div>
    若上述值不存在,则使用character_set_server设定值。
   </div>
   <div>
    (3). 将操作结果从内部操作字符集转换为character_set_results。
   </div>
   <div>
    <strong>2:权限相关的一些表:</strong>
   </div>
   <div>
    SCHEMA_PRIVILEGES:提供了数据库的相关权限,这个表是内存表是从mysql.db中拉去出来的。
   </div>
   <div>
    TABLE_PRIVILEGES:提供的是表权限相关信息,信息是从 mysql.tables_priv 表中加载的
   </div>
   <div>
    COLUMN_PRIVILEGES :这个表可以清楚就能看到表授权的用户的对象,那张表那个库以及授予的是什么权限,如果授权的时候加上with grant option的话,我们可以看得到PRIVILEGE_TYPE这个值必须是YES。
   </div>
   <div>
    USER_PRIVILEGES:提供的是表权限相关信息,信息是从 mysql.user 表中加载的
   </div>
   <div>
    通过表我们可以很清晰看得到MySQL授权的层次,SCHEMA,TABLE,COLUMN级别,当然这些都是基于用户来授予的。可以看得到MySQL的授权也是相当的细密的,可以具体到列,这在某一些应用场景下还是很有用的,比如审计等。
   </div>
   <div>
    <strong>3:存储数据库系统的
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP