golang简单操作mysql

南苑bert · · 740 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

首先我们要找到自己的gopath目录

然后在cd 到 GOPATH目录下面。

go get -u github.com/go-sql-driver/mysql
image.png

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("名字改来改去还是成功了")
}


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:南苑bert

查看原文:golang简单操作mysql

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

740 次点击  
加入收藏 微博
上一篇:Golang interface
下一篇:golang
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传