一、安装驱动
go get github.com/go-sql-driver/mysql
二、导入需要的包
import ( "database/sql" "fmt" _ "github.com/go-sql-driver/mysql" )
三、连接数据库
// "用户名:密码@tcp(IP:端口)/数据库?charset=utf8" db, err := sql.Open("mysql", "root:123456@tcp(127.0.0.1:3306)/book_manager?charset=utf8") if err!=nil { fmt.Println(err) return }
四、查询表数据
//表结构 type info struct { id int `db:"id"` name string `db:"name"` author string `db:"author"` } //查询表 rows,err:=db.Query("SELECT * FROM book") if err!=nil { fmt.Println(err) return } //遍历打印 for rows.Next(){ var s info err=rows.Scan(&s.id,&s.name,&s.author) fmt.Println(s) } //用完关闭 rows.Close()
五、插入数据
//执行MySql语句 result,err:=db.Exec("INSERT INTO book(id,name,author)VALUES (?,?,?)",2,"将进酒","李白") if err != nil { panic(err) } fmt.Println(result) // 查询数据 rows,err:=db.Query("SELECT * FROM book") for rows.Next(){ var s info err=rows.Scan(&s.id,&s.name,&s.author) fmt.Println(s) } rows.Close() }
六、删除数据
db.Exec("DELETE FROM book where id=?", 2) // 查询数据 rows,err:=db.Query("SELECT * FROM book") for rows.Next(){ var s info err=rows.Scan(&s.id,&s.name,&s.author) fmt.Println(s) }
七、事务的使用
通过db.Begin()来开启一个事务,Begin方法会返回一个事务对象Tx。在结果变量Tx上调用Commit()或者Rollback()方法会提交或回滚变更,并关闭事务。在底层,Tx会从连接池中获得一个连接并在事务过程中保持对它的独占。事务对象Tx上的方法与数据库对象sql.DB的方法一一对应,例如Query,Exec等。事务对象也可以准备(prepare)查询,由事务创建的准备语句会显式绑定到创建它的事务。
//开启事务 tx, err := DB.Begin() if err != nil { fmt.Println("tx fail") } //准备sql语句 stmt, err := tx.Prepare("DELETE FROM user WHERE id = ?") if err != nil { fmt.Println("Prepare fail") return false } //设置参数以及执行sql语句 res, err := stmt.Exec(user.id) if err != nil { fmt.Println("Exec fail") return false } //提交事务 tx.Commit()
完整查询数据代码
package main import ( "database/sql" "fmt" _ "github.com/go-sql-driver/mysql" ) func main() { db, err := sql.Open("mysql", "root:123456@tcp(127.0.0.1:3306)/book_manager?charset=utf8") if err!=nil { fmt.Println(err) return } type info struct { id int `db:"id"` name string `db:"name"` author string `db:"author"` } rows,err:=db.Query("SELECT * FROM book") if err!=nil { fmt.Println(err) return } for rows.Next(){ var s info err=rows.Scan(&s.id,&s.name,&s.author) fmt.Println(s) } rows.Close() }