MySQL数据库表生成Markdown工具
业务描述
输入 :
连接MySQL数据库的 地址 端口 库名
输出 :
扫描输入库名的所有表生成如下格式的Markdown文档
#* 表名 *(*表备注*)* 字段名 | 字段类型 | 是否为空 | 备注 ‐‐‐|‐‐‐|‐‐‐|‐‐‐ id | int | N | 主键 name | varchar(20) | N | 用户名
首先 拿到一个问题 先分析需要用到的功能:
1.首先我要连接数据库 地址 端口 库名
2.输入库名,将该库名下所有表生成格式为Markdown格式的文档
2.1 输入
2.2获取表
2.3按md格式生成
分析完需求,开始寻找第一步如何使用go语言连接数据库?
首先我们学习如何使用go操控Mysql数据库
1.安装测试
1.1安装驱动(go语言不内置连接数据库的驱动,所以这里我们得使用第三方驱动)
go get github.com/go-sql-driver/mysql
import ( "database/sql" "fmt" _"github.com/go-sql-driver/mysql" //这里意思是导入,不直接使用。、 )
1.2测试是否安装成功(运行,没有报错就是成功)
package mainimport ( // go语言中的这个包提供了SQL和类SQL数据库的常用接口,但是没有提供驱动。 "database/sql" // 在使用的时候必须注入一个驱动。(只能是第三方) _ "github.com/go-sql-driver/mysql")func main() { // DSN:Data Source Name // dsn :="user:password@tcp(ip地址:端口)/库名" dsn :="root:123456@tcp(127.0.0.1:3306)/dbname" // ""中填你的驱动名称 db,err :=sql.Open("mysql",dsn) // 报错格式 if err != nil { panic(err)} defer db.Close()}比如我把"mysql"中的q去掉,运行就会报错了。panic: sql: unknown driver "mysl" (forgotten import?)未知的驱动 mysl
然后因为database/sql我没有找到中文文档教程,然后转用GORM,GORM有中文文档教程,但是在此之前,我要重新配置一个mysql,和navicat。
安装Mysql数据库
到这里,那么我们先安装一个MySQL数据库,录入一些信息,再尝试如何使用go操控数据库。
1.安装mysql到指定文件夹。(我的安装目录是: D:\Mysql\mysql-8.0.22-winx64)2.在安装目录内创建一个配置文件my.ini[mysqld]# 设置3306端口port=3306# 设置mysql的安装目录basedir=D:\Mysql\mysql-8.0.22-winx64# 设置mysql数据库的数据的存放目录datadir=D:\Mysql\mysql-8.0.22-winx64\Data# 允许最大连接数max_connections=200# 允许连接失败的次数。max_connect_errors=10# 服务端使用的字符集默认为utf8mb4character-set-server=utf8mb4# 创建新表时将使用的默认存储引擎default-storage-engine=INNODB# 默认使用“mysql_native_password”插件认证#mysql_native_passworddefault_authentication_plugin=mysql_native_password[mysql]# 设置mysql客户端默认字符集default-character-set=utf8mb4[client]# 设置mysql客户端连接服务端时默认使用的端口port=3306default-character-set=utf8mb43.初始化使用管理员模式的命令端口(CMD)进入mysql的bin目录内下输入:mysqld --initializa --console 默认初始化命令D:\Mysql\mysql-8.0.22-winx64>cd binD:\Mysql\mysql-8.0.22-winx64\bin>mysqld --initializa --console2020-12-12T04:08:25.713423Z 0 [System] [MY-013169] [Server] D:\Mysql\mysql-8.0.22-winx64\bin\mysqld.exe (mysqld 8.0.22) initializing of server in progress as process 100122020-12-12T04:08:25.727804Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.2020-12-12T04:08:26.905803Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.2020-12-12T04:08:28.975272Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: 2yqowz(ehwsZ——————分界线———————————得到的这一串代码里面,root就是用户名,冒号后面的就是密码 2yqowz(ehwsZ用户名:root 密码:2yqowz(ehwsZ4.Mysql服务的安装-启动-登录4.1-安装 D:\Mysql\mysql-8.0.22-winx64\bin>mysqld --installService successfully installed.4.2-启动安装成功后输入 net start mysql (启动MySQL服务)D:\Mysql\mysql-8.0.22-winx64\bin>net start mysqlMySQL 服务正在启动 .MySQL 服务已经启动成功。 4.3登录D:\Mysql\mysql-8.0.22-winx64\bin>mysql -u root -pEnter password: ************ //win10复制后,鼠标右键填充密码。5.修改初始化密码ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';按照上面的格式 mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';Query OK, 0 rows affected (0.02 sec) 修改完成 退出来 重新登录验证一次D:\Mysql\mysql-8.0.22-winx64\bin>mysql -u root -pEnter password: ****** //我这里输入的是123456Welcome to the MySQL monitor. Commands end with ; or \g.Your MySQL connection id is 9Server version: 8.0.22 MySQL Community Server - GPLCopyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or itsaffiliates. Other names may be trademarks of their respectiveowners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.好 到这里 mysql就算是配置完成了为了打开cmd就能直接使用,设置一个path的环境变量就行了。
Navicat连接数据库
安装配置完Mysql数据库后 我们应该下载使用Navicat15 MySQL版本。
当你使用注册机的时候注意全程断网就行了。
然后到这里,就开始使用GORM。
GORM学习
什么是ORM?
Object | Relational | Mapping |
---|---|---|
对象 | 关系 | 映射 |
程序中的对象/实例(例如Go中的结构实例) | 关系数据库(例如MySQL) |
比如
package mainimport ( "fmt")type Student struct { id int name string}func main() { u1 :=Student{1,"JOJO"} fmt.Println(u1)}main方法打印结果:{1 JOJO}
我们使用MySQL的原因就是将数据存储到数据库中,MySQL中的数据表就是结构体,数据行就是对象u1,‘字段’就是‘id int’,'name string'这样的字段。
首先按照视频讲解,我们在github中搜索到GORM,进入官网后,查看文档,为了锻炼看文档的能力,这教学视频看到开头,不看也罢!!!!开始看文档,分析我可能用到的要求。
1.连接数据库2.增删改查 3.遍历数据库表的内容//照着这个步骤搜寻知识,有空就全面总结。当然第一步登录github,创建一个账号,然后想一个读起来很6的拼音打上去!我的Username:Xiuluofashi然后在里面找到jinzhu的GORM,打开就能找到GORM官网文档https://gorm.io/docs/
开始正式学习:
下载安装驱动:
go get -u github.com/jinzhu/gorm
完成后可以开始学习了
1.使用GORM连接数据库
官方文档:
import ( "gorm.io/driver/mysql" "gorm.io/gorm")func main() { // 参考 https://github.com/go-sql-driver/mysql#dsn-data-source-name 获取详情 dsn := "user:pass@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local" db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})}
连接:
package mainimport ( _ "github.com/go-sql-driver/mysql" "github.com/jinzhu/gorm")type Student struct { id int name string age int sex string }func main() { // 这里的信息是我的数据库的信息 dsn := "root:123456@tcp(127.0.0.1:3306)/study?charset=utf8mb4&parseTime=True&loc=Local" // 这里有2个值,一个是 *gorm.DB类型 一个是error类型,需要两个变量来接受 db, err := gorm.Open("mysql",dsn) // err是报错信息需要验证 if err != nil { panic(err)} // 运行一次结束程序 defer db.Close() // 把结构体和数据表进行对应 db.AutoMigrate(&Student{}) u1 := Student{id:1, name:"叶良辰", age:19,sex:"男"} db.Create(&u1)}然后我这里连接后,看我的study数据库中的信息还是为空!!!!!(〃>目<)mysql> show tables;Empty set (0.00 sec)也就是说根本没连上,我想是不是端口号弄错了,然后我检查端口show global variables like 'port';+---------------+-------+| Variable_name | Value |+---------------+-------+| port | 3306 |+---------------+-------+1 row in set, 1 warning (0.02 sec)起初以为密码密码输入错了,改了一个值后报错panic: Error 1045: Access denied for user 'root'@'localhost' (using password: YES)那现在的情况就是,账号密码端口都是对的情况下,数据库连上了但是数据录不进去的问题。最后想起来了,之前go get的时候有一个exec;exec: "gcc": executable file not found in %PATH%原来是找错了方向,安装gcc那么就需要MinGW64位版本的软件。脚本之家就能下载。安装完后,配置bin环境变量,使用命令行gcc -v 出来代码就安装上了,然后运行代码,还是一样的问题,得不到解决,弄到这里花了N多个小时却没有解决这种小问题,关键是本人还知道这是学习前的准备工作,卡在了这里!!!!!!很崩溃,但是得牢牢记住一句话--搜集资源,心态稳住,行胜于言该找问题,还是得找问题。毕竟没有得到解决。
那么还是得找,为什么和视频中一模一样的操作,代码都一模一样,为什么数据库连上了,传递了,就是没反应呢?慢慢来解决好了。