首先我们要找到自己的gopath目录
然后在cd 到 GOPATH目录下面。
go get -u github.com/go-sql-driver/mysql
mysql 文件 bert.sql
-- phpMyAdmin SQL Dump
-- version 4.8.2
-- https://www.phpmyadmin.net/
--
-- Host: 127.0.0.1
-- Generation Time: 2020-04-09 18:11:23
-- 服务器版本: 5.7.19-log
-- PHP Version: 7.2.6
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET AUTOCOMMIT = 0;
START TRANSACTION;
SET time_zone = "+00:00";
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
--
-- Database: `bert`
--
-- --------------------------------------------------------
--
-- 表的结构 `user`
--
CREATE TABLE `user` (
`id` int(11) NOT NULL,
`username` varchar(20) NOT NULL,
`password` varchar(30) NOT NULL,
`img` varchar(30) NOT NULL,
`email` varchar(30) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
--
-- 转存表中的数据 `user`
--
INSERT INTO `user` (`id`, `username`, `password`, `img`, `email`) VALUES
(1, '12312', 'e1y.tuEXKZRRE', 'bert1.jpg', '2817228206@qq.com'),
(2, '12312', 'e1y.tuEXKZRRE', 'bert2.jpg', '1263701671@qq.com'),
(3, 'bert', '1232123', 'img', '123456789@qq.com');
--
-- Indexes for dumped tables
--
--
-- Indexes for table `user`
--
ALTER TABLE `user`
ADD PRIMARY KEY (`id`);
--
-- 在导出的表使用AUTO_INCREMENT
--
--
-- 使用表AUTO_INCREMENT `user`
--
ALTER TABLE `user`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=4;
COMMIT;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
初始化一些参数
文件名:main.go
package main
import (
"fmt"
"github.com/jmoiron/sqlx"
)
var db *sqlx.DB
type user struct {
username, email string
}
func initDB() (err error) {
// 自己连接mysql的参数
// 一般为 root:root@tcp(127.0.0.1:3306)/bert
/*
1. 第一个root 是连接mysql 的用户名
2. 第二个root 是密码
3. tcp是连接mysql通讯层
4. 127.0.0.1 和localhost都代表本地服务器
5. 3306 是mysql 的默认端口
6.bert 是我的数据库名
*/
dsn := "root:@tcp(127.0.0.1:3306)/bert"
db, err = sqlx.Connect("mysql", dsn)
if err != nil {
fmt.Println(err)
return
}
// 设置mysql 最大连接量
db.SetMaxOpenConns(20)
// 设置连接池中的最大闲置连接数。
db.SetMaxIdleConns(10)
return
}
// mysql 查询单条
func querySelectRowDemo() {
sqlStr := "select username,email from user id=?"
var u user
// sql select username,email from user id=1
err := db.Get(&u, sqlStr, 1)
if err != nil {
fmt.Println("怎么办 拿不到资源", err)
return
}
fmt.Println(u.email, u.username)
}
/ mysql 查询所有
func querySelectAllsDemo() {
sqlStr := "select username,email from user where id> ?"
var ArrUser []user
// select username,email from user where id>0
err := db.Select(&ArrUser, sqlStr, 0)
if err != nil {
fmt.Printf("query failed,err%v\n", err)
return
}
fmt.Println(ArrUser)
}
// 更新数据
func updateRowDemo() {
sqlStr := "update user set username=? where id=?"
ret, err := db.Exec(sqlStr, "bert", 1)
if err != nil {
fmt.Printf("怎么办! ret出错了,不给我改名字%v\n", err)
return
}
n, err := ret.RowsAffected()
if err != nil {
fmt.Printf("怎么办! n的规则出错了,不给我改名字%v\n", err)
return
}
fmt.Printf("update success, affected rows:%d\n", n)
}
// 删除数据
func deleteRowDemo() {
sqlStr := "delete from user where id = ?"
ret, err := db.Exec(sqlStr, 6)
if err != nil {
fmt.Printf("delete failed, err:%v\n", err)
return
}
n, err := ret.RowsAffected() // 操作影响的行数
if err != nil {
fmt.Printf("get RowsAffected failed, err:%v\n", err)
return
}
fmt.Printf("delete success, affected rows:%d\n", n)
}
// 事务
unc transactionDemo() {
tx, err := db.Beginx() // 开启事务
if err != nil {
if tx != nil {
tx.Rollback() // 回滚
}
fmt.Printf("open begin failed, err%v\n", err)
return
}
sqlStr1 := "update user set username=1234 where id=?"
tx.MustExec(sqlStr1, 2)
sqlStr2 := "update user set username=4567 where id=?"
tx.MustExec(sqlStr2, 2)
err = tx.Commit() // 提交事务
if err != nil {
tx.Rollback() // 2个中有一个执行失败 回滚
return
}
fmt.Println("名字改来改去还是成功了")
}
有疑问加站长微信联系(非本文作者)