zoukankan      html  css  js  c++  java
  • 10.1Go Mysql

    第十章 Go Mysql

    准备好mysql数据库服务端数据。

    创建test数据库
    MariaDB [(none)]> create database test;
    Query OK, 1 row affected (0.04 sec)
    
    MariaDB [(none)]> use test;
    Database changed
    

    准备好数据表 person

    MariaDB [test]> CREATE TABLE `person` (
        -> `user_id` int(11) NOT NULL AUTO_INCREMENT,
        -> `username` varchar(260) DEFAULT NULL,
        -> `sex` varchar(260) DEFAULT NULL,
        -> `email` varchar(260) DEFAULT NULL,
        -> PRIMARY KEY (`user_id`)
        ->   ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
    Query OK, 0 rows affected (0.09 sec)
    

    准备好place表

    CREATE TABLE place (
        country varchar(200),
        city varchar(200),
        telcode int
    )ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
    

    查看表结构

    MariaDB [test]> desc person;
    +----------+--------------+------+-----+---------+----------------+
    | Field    | Type         | Null | Key | Default | Extra          |
    +----------+--------------+------+-----+---------+----------------+
    | user_id  | int(11)      | NO   | PRI | NULL    | auto_increment |
    | username | varchar(260) | YES  |     | NULL    |                |
    | sex      | varchar(260) | YES  |     | NULL    |                |
    | email    | varchar(260) | YES  |     | NULL    |                |
    +----------+--------------+------+-----+---------+----------------+
    4 rows in set (0.05 sec)
    
    MariaDB [test]> desc place;
    +---------+--------------+------+-----+---------+-------+
    | Field   | Type         | Null | Key | Default | Extra |
    +---------+--------------+------+-----+---------+-------+
    | country | varchar(200) | YES  |     | NULL    |       |
    | city    | varchar(200) | YES  |     | NULL    |       |
    | telcode | int(11)      | YES  |     | NULL    |       |
    +---------+--------------+------+-----+---------+-------+
    3 rows in set (0.00 sec)
    

    1.1. mysql驱动

    mysql使用 使用第三方开源的mysql库: github.com/go-sql-driver/mysql (mysql驱动)github.com/jmoiron/sqlx (基于mysql驱动的封装)

    命令行输入 :

    go get github.com/go-sql-driver/mysql 
    go get github.com/jmoiron/sqlx
    

    1.2. go-mysql增删改查

    插入数据

    package main
    
    import (
        "fmt"
        _ "github.com/go-sql-driver/mysql"
        "github.com/jmoiron/sqlx"
    )
    
    type Person struct {
        UserId   int    `db:"user_id"`
        Username string `db:"username"`
        Sex      string `db:"sex"`
        Email    string `db:"email"`
    }
    
    type Place struct {
        Country string `db:"country"`
        City    string `db:"city"`
        TelCode int    `db:"telcode"`
    }
    
    var Db *sqlx.DB
    
    func init() {
        database, err := sqlx.Open("mysql", "root:redhat@tcp(123.206.16.61:3306)/test")
        if err != nil {
            fmt.Println("open mysql failed,", err)
            return
        }
        Db = database
    }
    
    
    func main() {
        r, err := Db.Exec("insert into person(username, sex, email)values(?, ?, ?)", "stu001", "man", "stu01@qq.com")
        if err != nil {
            fmt.Println("exec failed, ", err)
            return
        }
        id, err := r.LastInsertId()
        if err != nil {
            fmt.Println("exec failed, ", err)
            return
        }
    
        fmt.Println("insert succ:", id)
    }
    

    查询数据

    package main
    
    import (
        "fmt"
    
        _ "github.com/go-sql-driver/mysql"
        "github.com/jmoiron/sqlx"
    )
    
    type Person struct {
        UserId   int    `db:"user_id"`
        Username string `db:"username"`
        Sex      string `db:"sex"`
        Email    string `db:"email"`
    }
    
    type Place struct {
        Country string `db:"country"`
        City    string `db:"city"`
        TelCode int    `db:"telcode"`
    }
    
    var Db *sqlx.DB
    
    func init() {
    
        database, err := sqlx.Open("mysql", "root:redhat@tcp(123.206.16.61:3306)/test")
        if err != nil {
            fmt.Println("open mysql failed,", err)
            return
        }
    
        Db = database
    }
    
    func main() {
    
        var person []Person
        err := Db.Select(&person, "select user_id, username, sex, email from person where user_id=?", 1)
        if err != nil {
            fmt.Println("exec failed, ", err)
            return
        }
    
        fmt.Println("select succ:", person)
    }
    

    更新数据

    package main
    
    import (
        "fmt"
    
        _ "github.com/go-sql-driver/mysql"
        "github.com/jmoiron/sqlx"
    )
    
    type Person struct {
        UserId   int    `db:"user_id"`
        Username string `db:"username"`
        Sex      string `db:"sex"`
        Email    string `db:"email"`
    }
    
    type Place struct {
        Country string `db:"country"`
        City    string `db:"city"`
        TelCode int    `db:"telcode"`
    }
    
    var Db *sqlx.DB
    
    func init() {
    
        database, err := sqlx.Open("mysql", "root:redhat@tcp(123.206.16.61:3306)/test")
        if err != nil {
            fmt.Println("open mysql failed,", err)
            return
        }
    
        Db = database
    }
    
    func main() {
    
        res, err := Db.Exec("update person set username=? where user_id=?", "stu0003", 1)
        if err != nil {
            fmt.Println("exec failed, ", err)
            return
        }
        row, err := res.RowsAffected()
        if err != nil {
            fmt.Println("rows failed, ",err)
        }
        fmt.Println("update succ:",row)
    
    }
    

    删除数据

    package main
    
    import (
        "fmt"
    
        _ "github.com/go-sql-driver/mysql"
        "github.com/jmoiron/sqlx"
    )
    
    type Person struct {
        UserId   int    `db:"user_id"`
        Username string `db:"username"`
        Sex      string `db:"sex"`
        Email    string `db:"email"`
    }
    
    type Place struct {
        Country string `db:"country"`
        City    string `db:"city"`
        TelCode int    `db:"telcode"`
    }
    
    var Db *sqlx.DB
    
    func init() {
    
        database, err := sqlx.Open("mysql", "root:redhat@tcp(123.206.16.61:3306)/test")
        if err != nil {
            fmt.Println("open mysql failed,", err)
            return
        }
    
        Db = database
    }
    
    func main() {
    
        /*
                _, err := Db.Exec("delete from person where user_id=?", 1)
                if err != nil {
                    fmt.Println("exec failed, ", err)
                    return
                }
        */
    
        res, err := Db.Exec("delete from person where user_id=?", 1)
        if err != nil {
            fmt.Println("exec failed, ", err)
            return
        }
    
        row, err := res.RowsAffected()
        if err != nil {
            fmt.Println("rows failed, ", err)
        }
    
        fmt.Println("delete succ: ", row)
    }
    

    1.3. mysql事务

    mysql事务特性:

        1) 原子性
        2) 一致性
        3) 隔离性
        4) 持久性
    

    golang MySQL事务应用:

        1) import (“github.com/jmoiron/sqlx")
        2)  Db.Begin()        开始事务
        3)  Db.Submit()        提交事务
        4)  Db.Rollback()     回滚事务
  • 相关阅读:
    【Android开发学习笔记】【高级】【随笔】插件化——初探
    【Android测试】【第十三节】Uiautomator——如何组织好你的测试代码(项目实战)
    【Android测试】【第十二节】Uiautomator——API详解
    【Android测试】【第十一节】Uiautomator——简介
    【Android测试】【第十节】MonkeyRunner—— 录制回放
    【Android测试】【第九节】MonkeyRunner—— 初识
    poj 1475 推箱子
    leetcode Ch3-DFS & Backtracking I
    Windows Socket和Linux Socket编程的区别 ZZ
    Linux网络编程入门 (转载)
  • 原文地址:https://www.cnblogs.com/open-yang/p/11256940.html
Copyright © 2011-2022 走看看