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
如果安装失败,检查一下目录是否有go.mod文件,如果没有,请使用以下命令,进行初始化
go mod init 应用名称 就是在应用名称的根目录下,生成一个go.mod文件。
go mod init test
链接mysql
database, err := sqlx.Open("mysql", "root:XXXX@tcp(127.0.0.1:3306)/test")
//database, err := sqlx.Open("数据库类型", "用户名:密码@tcp(地址:端口)/数据库名")
创建测试表语句,用innodb引擎
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(128) DEFAULT NULL,
`gender` tinyint(255) DEFAULT NULL,
`age` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
以下是增删改查和mysql事务源码示例:
package main
import (
"fmt"
_ "github.com/go-sql-driver/mysql"
"github.com/jmoiron/sqlx"
)
type User struct {
Id int
Name string
Gender int
Age int
}
type Place struct {
Country string
City string
Telcode int
}
var Db *sqlx.DB
func init() {
database, err := sqlx.Open("mysql", "root:root@tcp(127.0.0.1:3306)/beego")
if err != nil {
fmt.Println("open mysql failed,", err)
return
}
Db = database
}
func main() {
// create
// r, err := Db.Exec("insert into user( name, gender, age) values (?,?,?)", "wangwu", 1, 22)
// 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)
// select
// var user []User
// err := Db.Select(&user, "select id, name, gender, age from user where id=?", 1)
// if err != nil {
// fmt.Println("exec failed, ", err)
// return
// }
// fmt.Println("select succ:", user)
// Update
// r, err := Db.Exec("update user set age=? where id=?", 23, 1)
// if err != nil {
// fmt.Println("update failed", err)
// return
// }
// row, err := r.RowsAffected()
// if err != nil {
// fmt.Println("row failed", err)
// }
// println("update succ ", row)
// delete
// r, err := Db.Exec("delete from user where id=?", 3)
// if err != nil {
// fmt.Println("delete failed", err)
// return
// }
// row, err := r.RowsAffected()
// if err !=nil {
// fmt.Println("delete failed", err)
// return
// }
// println("delete succ", row)
// 事务
conn, err := Db.Begin()
if err != nil {
fmt.Println("begin failed :", err)
return
}
r, err := conn.Exec("insert into user( name, gender, age) values (?,?,?)", "wangwu", 1, 22)
if err != nil {
fmt.Println("exec failed, ", err)
conn.Rollback()
return
}
id, err := r.LastInsertId()
if err != nil {
fmt.Println("exec failed, ", err)
conn.Rollback()
return
}
fmt.Println("insert succ:", id)
r, err = conn.Exec("insert into user(id, name, gender, age) values (?,?,?)", 1,"wangwu", 1, 22)
if err != nil {
fmt.Println("exec failed, ", err)
conn.Rollback()
return
}
id, err = r.LastInsertId()
if err != nil {
fmt.Println("exec failed, ", err)
conn.Rollback()
return
}
fmt.Println("insert succ:", id)
conn.Commit()
}