Go-simple(11)数据库操作

这里以常见的mysql数据库进行说明。
Mysql数据库的驱动:
https://github.com/go-sql-driver/mysql 支持database/sql,全部采用go写。

1 数据库测试表

以用户表为例:

CREATE TABLE `t_user`  (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',
  `user_name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '系统用户名称',
  `user_pwd` varchar(250) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '系统用户密码',
  `role_id` int(255) DEFAULT NULL COMMENT '角色',
  `user_phone` varchar(11) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '手机号',
  `reg_time` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '登记时间',
  `user_status` int(1) NOT NULL DEFAULT 0 COMMENT '状态(0:无效;1:有效)',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '系统管理员帐号' ROW_FORMAT = Dynamic;

表中已有的数据:
在这里插入图片描述

2 安装mysql驱动

安装mysql驱动
第1种方式:go get下载命令:

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

第2种方式:配置go.mod文件。

require github.com/go-sql-driver/mysql v1.6.0

通过go module方式下载管理,工程会自动下载所需的包:
在这里插入图片描述

3 mysql操作

3.1 打开数据库

打开数据库的函数代码如下:

db, err := sql.Open("mysql", "root:password@tcp(localhost:3306)/ dbname")

3.2 CRUD操作

执行sql语句两种方式:
第1种: 直接执行sql语句。

//查询多行
func (db *DB) Query(query string, args ...interface{}) (*Rows, error) 
//查询单行
func (db *DB) QueryRow(query string, args ...interface{}) *Row
//INSERT、DELETE、UPDATE等
func (db *DB) Exec(query string, args ...interface{}) (Result, error)

第2种: 预编译方式
预编译时,不需要设置数据,使用问号占位即可。

func (db *DB) Prepare(query string) (*Stmt, error)

会返回 sql.Stmt 对象,之后的操作:

func (db *DB) Prepare(query string) (*Stmt, error)
会返回 sql.Stmt 对象,之后的操作:
//执行非查询类语句
func (s *Stmt) Exec(args ...interface{}) (Result, error)
//执行查询类语句,返回多行的 Rows 对象
func (s *Stmt) Query(args ...interface{}) (*Rows, error)
//执行查询类语句,返回单行的 Row 对象
func (s *Stmt) QueryRow(args ...interface{}) *Row

我们这里选择第1种方式测试。

3.2.1 测试查询数据

执行查询数据代码如下:

//查询数据
func SelectData(db *sql.DB)  {
	rows, err := db.Query("select id, user_name, user_pwd, user_phone from t_user")
	if err != nil {
		fmt.Println(err)
		return
	}
	defer rows.Close()
	for rows.Next() {
		var id int64
		var userName string
		var userPwd string
		var userPhone string
		rows.Scan(&id, &userName, &userPwd, &userPhone)
		fmt.Println(id)
		fmt.Println(userName)
		fmt.Println(userPwd)
		fmt.Println(userPhone)
	}
}

查询结果如下:
在这里插入图片描述

3.2.1 测试修改数据

修改数据,执行代码如下:

//修改数据
func UpdateData(db *sql.DB)  (sql.Result, error) {
	//修改
	results, err:= db.Exec("UPDATE t_user SET user_pwd=? WHERE user_name=?","654321","令狐冲" )
	return results,err
}

执行后查询结果如下:
在这里插入图片描述

3.3 事务

事务相关的操作:

//开启事务,返回Tx事务对象应用
func (db *DB) Begin() (*Tx, error)
//提交事务
func (tx *Tx) Commit() error
//回滚事务
func (tx *Tx) Rollback() error
//执行非查询类SQL
func (tx *Tx) Exec(query string, args ...interface{}) (Result, error)
//执行查询类SQL,返回多条
func (tx *Tx) Query(query string, args ...interface{}) (*Rows, error)
//执行查询类sQL,返回单条
func (tx *Tx) QueryRow(query string, args ...interface{}) *Row
//预编译
func (tx *Tx) Prepare(query string) (*tmt, error)
//将事务外预编译好的语句对象纳入事务
func (tx *Tx) Stmt(stmt *Stmt) *Stmt

代码详见:
https://gitee.com/linghufeixia/go-simple
chapter5

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值