您的位置 首页 php

php制作数据库数据字典

在开发过程中,需要对数据库进行管理,用过一些数据库字典导出软件,但是后期数据库做了改动无法同步数据,需要再导出一份新的 数据字典 ,今天就通过php实现web版数据库数据字典查看功能,目的:1.能实时的同步数据;2.方便查看,不必每次都去查阅数据库;3.方便后期开发人员了解数据结构。

现在开始说明下实现步骤:

一、准备工作:

运行环境:wamp(apache2.4.9、mysql5.6.17、php7.3.8[该版本为个人改版])

使用框架:ThinkPHP5.0(下载地址:www.thinkphp.cn)

建立虚拟主机:www.dictionary.com

二、框架结构部署:

1、application目录下创建数据字典模块目录,这里为data。

2、在模块下分别创建控制器目录controller、模型目录model、视图目录view、…[其他目录根据需求自定义]。

3、控制器目录下创建数据库字典控制器文件,这里为Dictionary.php。

4、模型目录下创建数据库字典模型文件,这里为Dictionary.php。

5、视图目录下创建数据库字典视图文件,这里为index.php。

三、代码实现:

控制器文件Dictionary.php代码:

<?php
/**
 * 数据库字典控制器类
 *
 * class Dictionary
 * @method index 获取字典数据并映射到前端方法
 */
namespace app\data\controller;
 
use think\Controller;
 
class Dictionary extends Controller
{
 /**
 * 获取数据库字典数据并映射到前端
 */
 public function index()
 {
 // 获取数据库字典数据
 $result = model('Dictionary')->ge td atabaseStructure();
 
 $dataArr = array();
 
 // 数据整理-按表分类
 foreach ($result as $k => $v) {
 $v['EXTRA'] = !empty($v['EXTRA']) ? '是' : '';
 $dataArr[$v['TABLE_NAME'].$v['TABLE_COMMENT']][] = $v;
 }
 
 // 映射到前端
 return $this->fetch('index',['dbname'=>$result[0]['TABLE_SCHEMA'],'data'=>$dataArr]);
 }
 
}
 

模型文件Dictionary.php代码:

<?php
/**
 * 数据库字典模型类
 *
 * class Dictionary
 * @method getDatabaseStructure 获取字典数据
 */
namespace app\data\Model;
 
use think\Model;
 
class Dictionary extends Model
{
 /**
 * 查询数据库结构
 *
 * @return $result 数据库字典数据
 */
 public function getDatabaseStructure()
 {
 $result = \think\Db::table('information_schema.COLUMNS')->alias('C')
 ->join('information_schema.TABLES T','C.TABLE_SCHEMA = T.TABLE_SCHEMA AND C.TABLE_NAME = T.TABLE_NAME')
 ->field(['C.TABLE_SCHEMA', // 数据库
 'C.TABLE_NAME', // 数据表
 'T.TABLE_COMMENT', // 数据表注释
 'C.COLUMN_NAME', // 数据表字段名
 'C.COLUMN_TYPE', // 数据表字段类型
 'C.COLUMN_COMMENT', // 数据表字段注释
 'C.COLUMN_DEFAULT', // 数据表字段默认值
 'C.IS_NULLABLE', // 数据表字段是否允许为空
 'C.EXTRA']) // 数据表字段是否为自增字段
 ->where('C.TABLE_SCHEMA','databaseName') // 需要查询的数据库
 ->select();
 
 return $result;
 }
}
 

视图文件index.php代码:

<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>{$dbname}_数据字典</title>
<link href="" rel="stylesheet">
</head>
<body>
<div class="container">
 <h1 style="text-align:center;">{$dbname} 数据字典</h1>
 {volist name="data" id="list"}
 <h3>{$key}</h3>
 <table class="table table-hover table-bordered table-condensed">
 <thead>
 <tr>
 <th>字段名</th
 ><th>数据类型</th>
 <th>默认值</th>
 <th>允许非空</th>
 <th>自动递增</th>
 <th>备注</th>
 </tr>
 </thead>
 <tbody>
 {volist name="list" id="item"}
 <tr>
 <td>{$item.COLUMN_NAME}</td>
 <td>{$item.COLUMN_TYPE}</td>
 <td>{$item.COLUMN_DEFAULT}</td>
 <td>{$item.IS_NULLABLE}</td>
 <td>{$item.EXTRA}</td>
 <td>{$item.COLUMN_COMMENT}</td>
 </tr>
 {/volist}
 </tbody>
 </table>
 {/volist}
</div>
</body>
</html>
 

代码完成,访问效果如图:

另外,这里对information_schema数据库下的 COLUMNS表和TABLES表中的字段做下介绍:

1、 COLUMNS表

TABLE_CATALOG :表限定符

TABLE_SCHEMA :表所属的库

TABLE_NAME :表名

COLUMN_NAME :表字段名

ORDINAL_POSITION :字段标识(字段编号,从1开始往后递增)

COLUMN_DEFAULT :字段默认值

IS_NULLABLE :字段是否为空

DATA_TYPE :数据类型(如:varchar、int、tinyint、decimal)

CHARACTER_MAXIMUM_LENGTH : 字段的最大字符数(适于二进制数据、字符数据,或者文本和图像数据。否则,返回 NULL)

CHARACTER_OCTET_LENGTH :字段的最大字节数(适于二进制数据、字符数据,或者文本和图像数据。否则,返回 NULL)

NUMERIC_PRECISION :数字精度(适于各类数字类型,如int、float。否则,返回NULL)

NUMERIC_SCALE :小数位数(适于各类数字类型,如int、float。否则,返回NULL)

DATETIME_PRECISION :datetime 及 SQL-92 interval 数据类型的子类型代码。对于其它数据类型,返回 NULL

CHARACTER_SET_NAME :字段字符集名称(如:utf8)

COLLATION_NAME :字符集排序规则(如:utf8_general_ci)

COLUMN_TYPE :字段类型

COLUMN_KEY :索引类型

EXTRA :其他信息(如:auto_increment)

PRIVILEGES :权限(如:select,insert,update,references)

COLUMN_COMMENT :字段注释

2、 TABLES表

TABLE_CATALOG :表限定符

TABLE_SCHEMA :表所属库

TABLE_NAME :表名

TABLE_TYPE :表类型

ENGINE :引擎

VERSION :版本

ROW_FORMAT :是否压缩

TABLE_ROWS :表记录总数

AVG_ROW_LENGTH :平均行长度

DATA_LENGTH :表的大小

MAX_DATA_LENGTH :最大数据长度

INDEX_LENGTH :索引的大小

DATA_FREE :表的可用空间

AUTO_INCREMENT :自增主键

CREATE_TIME :建表时间

UPDATE_TIME :更新时间

CHECK_TIME :查询时间

TABLE_COLLATION :表的字符集

CHECKSUM :校验和

CREATE_OPTIONS :创建选项

TABLE_COMMENT :表注释

今天分享到这里,感兴趣的朋友可以优化代码,添加更多的功能项,比如查询单表、支持修改、支持添加字段、支持切换数据库、做登录验证/jwt数据验证,打造在线版的数据库数据字典系统。

文章来源:智云一二三科技

文章标题:php制作数据库数据字典

文章地址:https://www.zhihuclub.com/149340.shtml

关于作者: 智云科技

热门文章

网站地图