七叶笔记 » golang编程 » Golang 操作mysql 之增删改查

Golang 操作mysql 之增删改查

Golang 提供了database/sql包用于对SQL数据库的访问, 作为操作数据库的入口对象sql.DB, 主要为我们提供了两个重要的功能:

sql.DB 通过数据库驱动为我们提供管理底层数据库连接的打开和关闭操作.

sql.DB 为我们管理 数据库连接池

查询的一般步骤如下:

调用 db.Query 执行 SQL 语句, 此方法会返回一个 Rows 作为查询的结果

通过 rows.Next() 迭代查询数据.

通过 rows.Scan() 读取每一行的值

通过 db.Exec()执行INSERT, UPDATE, DELETE操作

调用 db. Close () 关闭查询

通过使用预编译Prepare实现增删改查操作,开发中经常使用。

stmt, _ := dbw.Db.Prepare(`INSERT INTO user (name, age) VALUES (?, ?)`)

defer stmt.Close()

ret, err := stmt.Exec(“xys”, 23)

db.Prepare()返回的 statement 使用完之后需要手动关闭,即defer stmt.Close()

导入 mysql 数据库驱动

import (

“database/sql”

_ “github.com/go-sql-driver/mysql” //匿名导入的方式(在包路径前添加 _)

)

连接数据库

db, err := sql.Open(“mysql”, “root:@tcp(127.0.0.1:3306)/ test ? charset =utf8″);

sql.Open函数:func Open(driverName, dataSourceName string) (*DB, error)

查询遍历:

//查询数据,指定字段名,返回sql.Rows结果集

rows, _ := db.Query(“select id,name from test”);

id := 0;

name := “”;

for rows.Next() {

rows.Scan(&id, &name);

fmt.Println(id, name);

}

插入数据

ret, _ := db.Exec(“insert into test(id,name) values(null, ‘444’)”);

ins_id, _ := ret.LastInsertId();

更新数据

ret2, _ := db.Exec(“update test set name = ‘000’ where id > ?”, 2);

aff_nums, _ := ret2.RowsAffected();

删除数据

ret3, _ := db.Exec(“delete from test where id = ?”, 3);

del_nums, _ := ret3.RowsAffected();

事务处理

tx, _ := db.Begin();

ret4, _ := tx.Exec(“update test set price = price + 100 where id = ?”, 1);

ret5, _ := tx.Exec(“update test set price = price – 100 where id = ?”, 2);

upd_nums1, _ := ret4.RowsAffected();

upd_nums2, _ := ret5.RowsAffected();

if upd_nums1 > 0 && upd_nums2 > 0 {

//只有两条更新同时成功,那么才提交

tx. Commit ();

} else {

//否则回滚

tx.Rollback();

}

相关文章