现在开始解释下实现步骤:
一、准备事情:
运行环境: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')->getDatabaseStructure(); $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=\"大众http://cdn.bootcss.com/twitter-bootstrap/3.0.3/css/bootstrap.min.css\"大众 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>
代码完成,访问http://www.dictionary.com/data/dictionary/index,效果如图:
其余,这里对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数据验证,打造在线版的数据库数据字典系统。