[其它 Other] ci数据库工具类扩展

ci的数据库工具类、没有获取数据表列表等等的方法。在这里做了个扩展。主要用于做数据中心管理的。

<?php

/**
*
* @describe 数据中心模型
*
* @see class Databases()
* @author CrazyCodes <625566775@qq.com>
* @copyright MyAdmin 2017/3/14
* @version MyAdmin v0.0.1 Beta
*
* @internal
*      CrazyCodes <625566775@qq.com>
*
*/
class Databases_model extends MY_Model
{
    protected $tablesDb = NULL;

    protected $tableName = 'Tables_in_';

    private $mysqlSize = "concat(round(sum((DATA_LENGTH+INDEX_LENGTH)/1024/1024),2),'M')";

    private $mysqlRow = "TABLE_ROWS";

    private $mysqlEngine = "ENGINE";

    private $mysqlTime = "CREATE_TIME";

    /**
     *
     * @describe 构造
     *
     * @see $tablesDb 实例化一个新的数据对象、用于查询数据库
     * @load dbutil 数据库工具类
     * @access public
     * @see __construct()
     */
    public function __construct()
    {
        parent::__construct();

        $this->load->dbutil();

        $this->tablesDb = $this->load->database('tables', true);

        $this->tableName = $this->tableName . $this->db->database;
    }

    /**
     *
     * @describe 获取数据库列表 - 保留方法
     *
     * @load null
     * @access public
     * @see _getDatabases()
     */
    public function _getDatabases()
    {

    }

    /**
     *
     * @describe 获取数据表列表
     *
     * @load null
     * @access public
     * @see _getTables()
     */
    public function _getTables()
    {
        $result = $this->db->query('SHOW TABLES')->result_array();

        return $result;
    }

    /**
     *
     * @describe 获取数据表详细信息
     *
     * @load null
     * @access public
     * @see _getTableData()
     * @$_databasesData 查询到的数据表
     *
     */
    public function _getTableData($_databasesData)
    {

        foreach ($_databasesData as $key => $val) {

            $_databasesData[$key]['size'] = $this->_getSizeData($val[$this->tableName]);
            $_databasesData[$key]['row'] = $this->_getRowData($val[$this->tableName]);
            $_databasesData[$key]['engine'] = $this->_getEngineData($val[$this->tableName]);
            $_databasesData[$key]['time'] = $this->_getTimeData($val[$this->tableName]);

        }


        return $_databasesData;
    }

    /**
     *
     * @describe 获取数据添加时间
     *
     * @load null
     * @access protected
     * @see _getTimeData()
     * @$_tableName 要查询的表名
     */
    protected function _getTimeData($_tableName)
    {
        $timeData = $this->tablesDb->query($this->_sqlData($this->mysqlTime, $_tableName))->row_array();

        return $timeData['data'];
    }

    /**
     *
     * @describe 获取数据引擎
     *
     * @load null
     * @access protected
     * @see _getEngineData()
     * @$_tableName 要查询的表名
     */
    protected function _getEngineData($_tableName)
    {
        $engineData = $this->tablesDb->query($this->_sqlData($this->mysqlEngine, $_tableName))->row_array();

        return $engineData['data'];
    }

    /**
     *
     * @describe 获取数据条数
     *
     * @load null
     * @access protected
     * @see _getRowData()
     * @$_tableName 要查询的表名
     */
    protected function _getRowData($_tableName)
    {
        $rowData = $this->tablesDb->query($this->_sqlData($this->mysqlRow, $_tableName))->row_array();

        return $rowData['data'];
    }

    /**
     *
     * @describe 获取数据表大小
     *
     * @load null
     * @access protected
     * @see _getSizeData()
     * @$_tableName 要查询的表名
     */
    protected function _getSizeData($_tableName)
    {
        $sizeData = $this->tablesDb->query($this->_sqlData($this->mysqlSize, $_tableName))->row_array();

        return $sizeData['data'];
    }

    /**
     *
     * @describe 获取数据表详细信息
     *
     * @load null
     * @access protected
     * @see _sqlData()
     * @$_param 查询的参数
     * @$_tableName 要查询的表名
     */
    protected function _sqlData($_param, $_tableName)
    {
        $sql = "select " . $_param . " as data from tables " .
            "where table_schema='{$this->db->database}' AND " .
            "table_name='{$_tableName}'; ";

        return $sql;
    }
}

database.php 内设置 \ 因为要在information_schema库内查询、所以需要重新指向一个库。

/**
*
* @describe 为实现数据字典新建的库
*
* @access public
* @see __construct()
*/
$db['tables'] = $db['default'];
$db['tables']['database'] = 'information_schema';
 2018-06-28 14:12:32 星期四

最后修改:2年前 2017-03-14

© 著作权归作者所有

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏文渊之博

用于重新编译的工具和命令

1.SQL Prifiler:捕捉事件类型为SP和T-SQL的事件(Starting、Stmtcompleted、Recompile、Completed、Cac...

22490
来自专栏乐沙弥的世界

数据导入时遭遇 ORA-01187 ORA-01110

最近的数据导入(IMP)时碰到了ORA-01187 ORA-01110 错误,由于这个数据库是使用热备恢复过来的,且恢复也是成功的,因为数据库能够成功open,...

9130
来自专栏idba

死锁案例之四

一 前言 死锁,其实是一个很有意思也很有挑战的技术问题,大概每个DBA和部分开发同学都会在工作过程中遇见 。关于死锁我会持续写一个系列的案例分析,希望能够对想...

9530
来自专栏杨建荣的学习笔记

merge语句导致的CPU使用率过高的优化(r7笔记第4天)

今天有一个数据库有点反常,早上的时候报出了CPU使用率的警告。 警告内容如下: ZABBIX-监控系统: -----------------------...

34050
来自专栏乐沙弥的世界

FORALL 之 SAVE EXCEPTIONS 子句应用一例

     对于大批量的DML操作中出现的错误,除了使用DML error logging特性来记录在DML期间出现的错误之外,使用批量SQL语句FORALL的S...

7410
来自专栏祥子的故事

HIVE窗口函数

CSDN博客地址:https://mp.csdn.net/mdeditor/81067060

31240
来自专栏乐沙弥的世界

RAC环境下的阻塞(blocking blocked)

      RAC环境下的阻塞不同于单实例情形,因为我们需要考虑到位于不同实例的session。也就是说之前查询的v$session,v$lock相应的应变化为...

12720
来自专栏乐沙弥的世界

使用带dblink方式的datapump迁移Oracle 10g到11g

      对于从Oracle 10g下迁移数据库到Oracle 11g,除了使用RMAN方式之外,我们可以使用带dblink的datapump方式来实现基于逻...

7210
来自专栏乐沙弥的世界

MySQL抑制binlog日志中的BINLOG部分

    MySQL通过binlog来记录整个数据的变更过程,因此我们只要有MySQL的binlog日志即可完整的还原数据库。MySQL binlog日志记录有3...

14910
来自专栏乐沙弥的世界

Oracle 角色、配置文件

增加或删除角色中的某一权限,被授予该角色的所有用户或角色自动地获得新增权限或删除旧的权限

10820

扫码关注云+社区

领取腾讯云代金券