美文网首页
golang简单操作mysql

golang简单操作mysql

作者: 南苑bert | 来源:发表于2020-04-09 17:56 被阅读0次

    首先我们要找到自己的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("名字改来改去还是成功了")
    }
    
    

    相关文章

      网友评论

          本文标题:golang简单操作mysql

          本文链接:https://www.haomeiwen.com/subject/hqfhmhtx.html