29
05月
2025
package main
import (
"encoding/json"
"fmt"
_ "github.com/go-sql-driver/mysql"
"github.com/jmoiron/sqlx"
)
type Person struct {
ID int `db:"id" json:"id"`
Name string `db:"name" json:"name"`
Age string `db:"age" json:"age"`
}
type insertd struct {
Name string `db:"name" json:"name"`
Age int `db:"age" json:"age"`
}
var Db *sqlx.DB
func init() {
database, err := sqlx.Open("mysql", "root:root@tcp(127.0.0.1:3306)/fa")
if err != nil {
fmt.Println("open mysql failed,", err)
return
}
Db = database
}
func selectdata(u_id int) {
var Person []Person
err := Db.Select(&Person, "select id, name, age from person where id=?", u_id)
if err != nil {
fmt.Println("exec failed, ", err)
return
}
fmt.Printf("Person: %v,类型:%T\n", Person, Person)
a, _ := json.Marshal(Person)
fmt.Println(string(a))
}
func insertdata(conn *sqlx.Tx) int {
var insertd insertd
insertd.Name = "张三"
insertd.Age = 20
r, err := conn.Exec("insert into person(name,age) values(?,?)", insertd.Name, insertd.Age)
// r, err := Db.NamedExec("insert into person(name,age) values(:name,:tags,:age)", insertd)
if err != nil {
fmt.Println("exec failed, ", err)
//事务回滚
conn.Rollback()
return 0
}
id, _ := r.LastInsertId()
fmt.Println("insert success", id)
return int(id)
}
func updatedata(u_id int, conn *sqlx.Tx) {
res, err := conn.Exec("update person set age=? where id=?", 30, u_id)
if err != nil {
fmt.Println("exec failed, ", err)
conn.Rollback()
return
}
row, err := res.RowsAffected()
if err != nil {
conn.Rollback()
fmt.Println("rows failed, ", err)
}
fmt.Println("update succ:", row)
}
func deletedata(u_id int, conn *sqlx.Tx) {
res, err := conn.Exec("delete from person where id=?", u_id)
if err != nil {
fmt.Println("exec failed, ", err)
conn.Rollback()
return
}
row, err := res.RowsAffected()
if err != nil {
fmt.Println("rows failed, ", err)
conn.Rollback()
}
fmt.Println("delete succ: ", row)
}
func main() {
//事务开启
conn, err := Db.Beginx()
if err != nil {
fmt.Println("begin failed :", err)
return
}
insert_id := insertdata(conn)
if insert_id == 0 {
fmt.Println("insert failed")
return
}
updatedata(insert_id, conn)
selectdata(insert_id)
deletedata(insert_id, conn)
//事务提交
conn.Commit()
}
非特殊说明,本文版权归 Code. 所有,转载请注明出处.
本文标题: golang连接数据库 增删改查以及事物
延伸阅读
学习golang(十) 学习golang(二) 学习golang(九) 学习golang(四) 学习golang(一)最新|与我有关