mysql 数据字典

Wesley13
• 阅读 593

平常要看 mysql 数据结构,可能需要登录服务器命令行查看,当然也可以用navicat 等软件,但是很麻烦,所以有了这个网页版。

生成mysql数据字典

  1. <?php

  2. /**

  3. * 生成mysql数据字典https://github.com/shangheguang/data_dictionary/blob/master/mysql.php

  4. */

  5. // 配置数据库

  6. $database = array();

  7. $database['DB_HOST'] = '127.0.0.1';

  8. $database['DB_NAME'] = 'test';

  9. $database['DB_USER'] = 'root';

  10. $database['DB_PWD'] = '';

  11. date_default_timezone_set('Asia/Shanghai');

  12. $mysql_conn = @mysqli_connect("{$database['DB_HOST']}", "{$database['DB_USER']}", "{$database['DB_PWD']}") or die("Mysql connect is error.");

  13. mysqli_select_db($mysql_conn, $database['DB_NAME']);

  14. $result = $mysql_conn->query('show tables');

  15. $mysql_conn->query('SET NAME UTF8');

  16. // 取得所有表名

  17. while ($row = mysqli_fetch_array($result))

  18. {

  19. $tables[]['TABLE_NAME'] = $row[0];

  20. }

  21. // 循环取得所有表的备注及表中列消息

  22. foreach($tables as $k => $v)

  23. {

  24. $sql = 'SELECT * FROM ';

  25. $sql .= 'INFORMATION_SCHEMA.TABLES ';

  26. $sql .= 'WHERE ';

  27. $sql .= "table_name = '{$v['TABLE_NAME']}' AND table_schema = '{$database['DB_NAME']}'";

  28. $table_result = $mysql_conn->query($sql);

  29. while ($t = mysqli_fetch_array($table_result))

  30. {

  31. $tables[$k]['TABLE_COMMENT'] = $t['TABLE_COMMENT'];

  32. }

  33. $sql = 'SELECT * FROM ';

  34. $sql .= 'INFORMATION_SCHEMA.COLUMNS ';

  35. $sql .= 'WHERE ';

  36. $sql .= "table_name = '{$v['TABLE_NAME']}' AND table_schema = '{$database['DB_NAME']}'";

  37. $fields = array();

  38. $field_result = $mysql_conn->query($sql);

  39. while ($t = mysqli_fetch_array($field_result))

  40. {

  41. $fields[] = $t;

  42. }

  43. $tables[$k]['COLUMN'] = $fields;

  44. }

  45. mysqli_close($mysql_conn);

  46. $html = '';

  47. // 循环所有表

  48. foreach($tables as $k => $v)

  49. {

  50. if($v['TABLE_NAME']){

  51. $html .= '<table border="1" cellspacing="0" cellpadding="0" align="center">';

  52. $html .= '<caption>表名:' . $v['TABLE_NAME'] . ' ------- ' . $v['TABLE_COMMENT'] . '</caption>';

  53. $html .= '<tbody><tr><th>字段名</th><th>数据类型</th><th>默认值</th><th>允许非空</th><th>自动递增</th><th>备注</th></tr>';

  54. $html .= '';

  55. foreach($v['COLUMN'] AS $f)

  56. {

  57. $html .= '<td class="c1">' . $f['COLUMN_NAME'] . '</td>';

  58. $html .= '<td class="c2">' . $f['COLUMN_TYPE'] . '</td>';

  59. $html .= '<td class="c3">' . $f['COLUMN_DEFAULT'] . '</td>';

  60. $html .= '<td class="c4">' . $f['IS_NULLABLE'] . '</td>';

  61. $html .= '<td class="c5">' . ($f['EXTRA'] == 'auto_increment'?'是':' ') . '</td>';

  62. $html .= '<td class="c6">' . $f['COLUMN_COMMENT'] . '</td>';

  63. $html .= '</tr>';

  64. }

  65. }

  66. $html .= '</tbody></table></p>';

  67. }

  68. // 输出

  69. echo '<html>

  70. <meta charset="utf-8">

  71. <title>自动生成数据字典</title>

  72. <style>

  73. body,td,th {font-family:"宋体"; font-size:12px;}

  74. table,h1,p{width:960px;margin:0px auto;}

  75. table{border-collapse:collapse;border:1px solid #CCC;background:#efefef;}

  76. table caption{text-align:left; background-color:#fff; line-height:2em; font-size:14px; font-weight:bold; }

  77. table th{text-align:left; font-weight:bold;height:26px; line-height:26px; font-size:12px; border:1px solid #CCC;padding-left:5px;}

  78. table td{height:20px; font-size:12px; border:1px solid #CCC;background-color:#fff;padding-left:5px;}

  79. .c1{ width: 150px;}

  80. .c2{ width: 150px;}

  81. .c3{ width: 80px;}

  82. .c4{ width: 100px;}

  83. .c5{ width: 100px;}

  84. .c6{ width: 300px;}

  85. </style>

  86. <body>';

  87. echo '<h1 style="text-align:center;">数据字典</h1>';

  88. echo '<p style="text-align:center;margin:20px auto;">生成时间:' . date('Y-m-d H:i:s') . '</p>';

  89. echo $html;

  90. echo '<p style="text-align:left;margin:20px auto;">总共:' . count($tables) . '个数据表</p>';

  91. echo '</body></html>';

效果

mysql 数据字典

如果使用 laravel 可以看看 https://github.com/jormin/laravel-ddoc 支持导出 Html 和 PDF 文件。

本文分享自微信公众号 - 苏生不惑(susheng_buhuo)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
Python3:sqlalchemy对mysql数据库操作,非sql语句
Python3:sqlalchemy对mysql数据库操作,非sql语句python3authorlizmdatetime2018020110:00:00coding:utf8'''
Easter79 Easter79
3年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Stella981 Stella981
3年前
Android蓝牙连接汽车OBD设备
//设备连接public class BluetoothConnect implements Runnable {    private static final UUID CONNECT_UUID  UUID.fromString("0000110100001000800000805F9B34FB");
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
为什么mysql不推荐使用雪花ID作为主键
作者:毛辰飞背景在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这