zoukankan      html  css  js  c++  java
  • MySQL默认INFORMATION_SCHEMA,MySQL,TEST三个数据库用途

    本文简要说明了MySQL数据库安装好后自带的INFORMATION_SCHEMA,MySQL,TEST三个数据库的用途。


    第一个数据库INFORMATION_SCHEMA:提供了访问数据库元数据的方式
    元数据是关于数据的数据,如数据库名或表名,列的数据类型,或访问权限等。有些时候用于表述该信息的其他术语包括“数据词典”和“系统目录”。
    INFORMATION_SCHEMA是信息数据库,其中保存着关于MySQL服务器所维护的所有其他数据库的信息。在INFORMATION_SCHEMA中,有数个只读表。它们实际上是视图,而不是基本表,因此,你将无法看到与之相关的任何文件。
    每位MySQL用户均有权访问这些表,但仅限于表中的特定行,在这类行中含有用户具有恰当访问权限的对象。

    更多信息请参考这里:

    http://dev.mysql.com/doc/refman/5.1/zh/information-schema.html


    现在很多人用phpmyadmin管理mysql数据库,有时候不想让普通用户通过phpmyadmin看到INFORMATION_SCHEMA数据库,可以设置一下

    在config.inc.php(有的是config.default.php)中设置这样一句
    $cfg['Servers'][$i]['hide_db']      = 'information_schema';


    SQLyog的设置方法:在设置用户名密码的时候,有个DataBase(s),在其中指定你需要访问的db就可以了。但这样就只能看一个,不知道如果在这里面使用“;”隔开会不会生效,没有试过。


    MySQL-front 的设置方法:  这种客户端如果不想看到这个“information_schema”,在设置的Login选项卡中,用户名密码的下面,也有一个DataBase,指定就可以了。


    第二个数据库mysql:这个是mysql的核心数据库,类似于sql server中的master表,主要负责存储数据库的用户、权限设置、关键字等mysql自己需要使用的控制和管理信息。不可以删除,如果对mysql不是很了解,也不要轻易修改这个数据库里面的表信息。


    第三个数据库是test:这个是安装时候创建的一个测试数据库,和它的名字一样,是一个完全的空数据库,没有任何表,可以删除。

    information_schema使用:

    select table_name,table_type,engine from information_schema.tables where table_schema='sanguo' order by
    table_name desc;

     table_name(表名)
     table_type(表类型)
     引擎
     v56  
     VIEW(视图)
     NULL
     v3

    VIEW(视图)

     NULL
     v2

    VIEW(视图)

     NULL
     v

    VIEW(视图)

     NULL
     tables 
     BASE TABLE(基本表)
     MyISAM 

     如何查看某个表更新:

    SELECT * FROMinformation_schema.tables where TABLE_SCHEMA='sanguo' AND TABLE_NAME='tb_ad_crontab';

     查看update_time字段(很久没有更新不代表现在没有使用哦)。但是我发现update_time为null。

    找出在7天前修改的。

    USE information_schema;
     
    SELECT TABLE_SCHEMA , TABLE_NAME 
    FROM 
    TABLES 
    WHERE UPDATE_TIME IS NOT NULL 
       AND 
         UPDATE_TIME > NOW() - INTERVAL 7 DAY 
       AND 
         TABLE_SCHEMA = 'store' 
       AND
         TABLE_NAME = 'prices'

     stackoverflow:

    How can I tell when a MySQL table was last updated?

    In later versions of MySQL you can use the information_schema database to tell you when another table was updated:

    SELECT UPDATE_TIME
    FROM   information_schema.tables
    WHERE  TABLE_SCHEMA ='dbname'AND TABLE_NAME ='tabname'

    This does of course mean opening a connection to the database.

    An alternative option would be to "touch" a particular file whenever the MySQL table is updated:

    On database updates:

    • Open your timestamp file in O_RDRW mode
    • close it again

    or alternatively

    • use the PHP equivalent of the utimes() function to change the file timestamp.

    On page display:

    • use stat() to read back the file modification time.

     找到为什么update_time为null了。因为This only works for MyISAM engine。

    我查myisam就有数据:

    SELECT table_name,`ENGINE`,update_time FROM `TABLES` where table_name='news';

    news MyISAM  2014-02-09 15:14:28

     http://stackoverflow.com/questions/2785429/how-can-i-determine-when-an-innodb-table-was-last-changed

    http://dba.stackexchange.com/questions/9569/fastest-way-to-check-if-innodb-table-has-changed

        $sql="SELECT UPDATE_TIME
            FROM   information_schema.tables
            WHERE  TABLE_SCHEMA ='$dbName' AND TABLE_NAME ='tb_ad_crontab2' ";
            
            $sqlModify=$db->createCommand($sql)->queryScalar();
            //echo "sqlModify:",$sqlModify,"
    ";
             
            $fileMtime=filemtime($this->crontabFile);
              clearstatcache() ;
            //echo "fileMtime:",$fileMtime," ",date("Y-m-d H:i:s",$fileMtime),"
    ";
            
            $list=array();
            //文件过期
            if($fileMtime<strtotime($sqlModify))
            {
                $model=new CDAOCrontab();
                $list=$model->getList();
                $content="<?php
     return ".var_export($list,TRUE).";
    ?>";
                file_put_contents($this->crontabFile,$content);
            }
            else
            {
                $list=require($this->crontabFile);
            }
            return $list;
         

     注意:

    filemtime和stat一样, 函数的结果会被缓存。请使用 clearstatcache() 来清除缓存。

    还有一点要特别注意:

    $file=fopen("my.txt","rw");

    模式打开

    ,这样的filemtime的结果一直是当前时间。用只读模式打开则没有问题。

    用fopen("my.txt",'r");

  • 相关阅读:
    reflow和repaint
    移动端事件
    不支持冒泡的事件
    Gulp
    JAVAWEB项目Tomcat与内网穿透实现外网访问,可连接mysql数据库
    Echarts连接Mysql使用心得
    layui的date组件在弹窗里闪退的解决办法
    Layui的table标签使用记录
    Layui后台实现页面内部的iframe跳转
    第16周作业
  • 原文地址:https://www.cnblogs.com/youxin/p/3641405.html
Copyright © 2011-2022 走看看