随心的博客

好记性不如个烂笔头,随心记录!

返回顶部

go操作mysql

数据库连接:

使用database/sql包时必须注入(至少)一个数据库驱动。

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

 

导入包:

import (

"database/sql"

_ "github.com/go-sql-driver/mysql"

)

 

通过Init函数连接数据库

db, dbErr = sql.Open("mysql", "root:root123456@tcp(127.0.0.1:3306)/yangtest?charset=utf8")

 

db.SetMaxOpenConns(200) //设置最大连接数

db.SetMaxIdleConns(20)   //设置闲时最大连接数

db.Close()  //关闭数据库连接

 

连接数据库示例:

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import (
    "database/sql"
    "fmt"
    _ "github.com/go-sql-driver/mysql"
    "log"
)
var db *sql.DB
var dbErr error
// init 只执行一次
func init(){
    db, dbErr =
 sql.Open("mysql", "root:root123456@tcp(127.0.0.1:3306)/yangtest?charset=utf8")
    if dbErr != nil {
        log.Fatal("dbErr:", dbErr.Error())
    }
    if dbErr = db.Ping(); dbErr != nil {
        log.Fatal("连接失败", dbErr.Error())
    }
 
    fmt.Println("连接数据库成功...")
 
    db.SetMaxOpenConns(200) //设置最大连接数
    db.SetMaxIdleConns(20)  //设置闲时最大连接数
 
}
 
func main() {
 
    db.Close() //关闭数据库连接
}

 

插入数据:

res, err := db.Exec("INSERT INTO users(username,email) VALUES(?,?)", "lampol", "1234@qq.com")

id, _ := res.LastInsertId()  //获取插入id

row, _ := res.RowsAffected() //获取影响行数

 

数据表:

 

CREATE TABLE `users` (

 

  `id` int(11) NOT NULL AUTO_INCREMENT,

 

  `username` varchar(100) DEFAULT NULL,

 

  `email` varchar(100) DEFAULT NULL,

 

  PRIMARY KEY (`id`)

 

) ENGINE=InnoDB  DEFAULT CHARSET=utf8;

 

 

插入数据示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// 插入数据
func insertData() {
    //数据库插入方式1:
    res, err := db.Exec("INSERT INTO users(username,email) VALUES(?,?)", "lampol", "1234@qq.com")
    if err != nil {
        log.Fatal("err:", err)
    }
    id, _ := res.LastInsertId()  //插入id
    row, _ := res.RowsAffected() //影响行数
    fmt.Println(id, row)
 
    //数据库插入方式2:
    pre, err := db.Prepare("INSERT INTO users(username,email) VALUES(?,?)")
    res1, err := pre.Exec("yangphp", "33333@qq.com")
    if err != nil {
        log.Fatal("err:", err)
    }
    id1, _ := res1.LastInsertId()  //插入id
    row1, _ := res1.RowsAffected() //影响行数
    fmt.Println(id1, row1)
}

 

查询多条数据

rows, err := db.Query("SELECT * FROM users ") 查询数据

rows.Next()  获取下一条数据

rows.Scan()  读取数据中的值

 

查询数据实例:查询多条

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
type User struct {
    Id       int    `json:id`
    UserName string `json:username`
    Email    string `string:email`
}
// 查询数据
func queryAll() {
    var user User
    rows, err := db.Query("SELECT * FROM users ")
    if err != nil {
        log.Fatal("err:", err)
    }
    //遍历数据
    var users = make([]User, 0)
    for rows.Next() {
        rows.Scan(&user.Id, &user.UserName, &user.Email)
        users = append(users, user)
    }
    fmt.Println(users)  //打印所有数据
fmt.Println(users[1].UserName) //获取某个字段
 
}

  

输出:

[{1 lampol 1234@qq.com} {2 yangphp 33333@qq.com}]

yangphp

查询单条
row := db.QueryRow("SELECT * FROM users WHERE id = ? ", id) //查询单条

row.Scan(&user.Id, &user.UserName, &user.Email)  //读取数据到变量

 

查询数据实例:查询单条

1
2
3
4
5
6
7
8
9
10
11
func queryOne(id int) {
    var user User
    row := db.QueryRow("SELECT * FROM users WHERE id = ? ", id)
 
    err := row.Scan(&user.Id, &user.UserName, &user.Email)
    if err != nil {
        log.Fatal("err:", err)
    }
    fmt.Println(user)
fmt.Println(user.UserName)
}

 

调用后输出:

{2 yangphp 33333@qq.com}

yangphp

更新数据:

1
2
3
4
5
6
7
8
func updateData(id int) {
    res, err := db.Exec("UPDATE users SET username = ? WHERE id = ?", "liming", id)
    if err != nil {
        log.Fatal(err)
    }
    num, _ := res.RowsAffected()
    fmt.Println(num) //打印出影响行数
}

 

删除数据:

1
2
3
4
5
6
7
8
func deleteData(id int) {
    ret, err := db.Exec("DELETE FROM users WHERE id = ?", id)
    if err != nil {
        log.Fatal(err)
    }
    num, _ := ret.RowsAffected()
    fmt.Println(num) //打印出影响行数
}

  

 

 

mysql事务:

 

show create table user;  查看表引擎,必须innodb 才可以

 

alter table user engine=innodb  修改表引擎

 

 

 

func (db *DB) Begin() (*Tx, error) Begin开始一个事务

 

func (tx *Tx) Rollback() error  回滚事务

 

func (tx *Tx) Commit() error  提交事务

 

 

事务处理示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// 事务处理
func transData() {
    trans, _ := db.Begin()
    res, _ := trans.Exec("INSERT INTO users(username,email) VALUES(?,?) ", "liudehua222", "45645@qq.com")
    addNum, _ := res.RowsAffected()
 
    ret, _ := trans.Exec("DELETE FROM users WHERE id = ?", 10)
    delNum, _ := ret.RowsAffected()
 
    fmt.Println(addNum, delNum)
 
    if addNum == 1 && delNum == 1 {
        trans.Commit()
        fmt.Println("执行事务成功")
    } else {
        trans.Rollback()
        fmt.Println("执行事务失败")
    }
}

 

由于没有id10的记录,所以执行失败了

 

 

 

完结

 

posted @   yangphp  阅读(45)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· 2 本地部署DeepSeek模型构建本地知识库+联网搜索详细步骤
点击右上角即可分享
微信分享提示