go语言中操作mysql的方法

摘要:
需要下载指定的golang的mysql驱动包˃gogetgithub.com/go-sql-driver/mysql下面的例子:packagemain;importfuncmain(){//打开数据库//DSN数据源字符串:用户名:密码@协议/数据库?=nil{fmt.Println;}//关闭数据库,db会被多个goroutine共享,可以不调用deferdb.Close();//查询数据,指定字段名,返回sql.Rows结果集rows,_:=db.Query;id:=0;name:="";forrows.Next(){rows.Scan;fmt.Println;}//查询数据,取所有字段rows2,_:=db.Query;//返回所有列cols,_:=rows2.Columns();//这里表示一行所有列的值,用[]byte表示vals:=make;//这里表示一行填充数据scans:=make;//这里scans引用vals,把数据填充到[]byte里fork,_:=rangevals{scans[k]=&vals[k];}i:=0;result:=make;forrows2.Next(){//填充数据rows2.Scan;//每行数据row:=make;//把vals中的数据复制到row中fork,v:=rangevals{key:=cols[k];//这里把[]byte数据转成stringrow[key]=string;}//放入结果集result[i]=row;i++;}fmt.Println;//查询一行数据rows3:=db.QueryRow("selectid,namefromtestwhereid=?

需要下载指定的golang的mysql驱动包

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

下面的例子:

package main;
import (
	"database/sql"
	_ "github.com/go-sql-driver/mysql"
	"fmt"
)
func main() {
	//打开数据库
	//DSN数据源字符串:用户名:密码@协议(地址:端口)/数据库?参数=参数值
	db, err := sql.Open("mysql", "root:@tcp(127.0.0.1:3306)/test?charset=utf8");
	if err != nil {
		fmt.Println(err);
	}
	//关闭数据库,db会被多个goroutine共享,可以不调用
	defer db.Close();
	//查询数据,指定字段名,返回sql.Rows结果集
	rows, _ := db.Query("select id,name from test");
	id := 0;
	name := "";
	for rows.Next() {
		rows.Scan(&id, &name);
		fmt.Println(id, name);
	}
	//查询数据,取所有字段
	rows2, _ := db.Query("select * from test");
	//返回所有列
	cols, _ := rows2.Columns();
	//这里表示一行所有列的值,用[]byte表示
	vals := make([][]byte, len(cols));
	//这里表示一行填充数据
	scans := make([]interface{}, len(cols));
	//这里scans引用vals,把数据填充到[]byte里
	for k, _ := range vals {
		scans[k] = &vals[k];
	}
	i := 0;
	result := make(map[int]map[string]string);
	for rows2.Next() {
		//填充数据
		rows2.Scan(scans...);
		//每行数据
		row := make(map[string]string);
		//把vals中的数据复制到row中
		for k, v := range vals {
			key := cols[k];
			//这里把[]byte数据转成string
			row[key] = string(v);
		}
		//放入结果集
		result[i] = row;
		i++;
	}
	fmt.Println(result);
	//查询一行数据
	rows3 := db.QueryRow("select id,name from test where id = ?", 1);
	rows3.Scan(&id, &name);
	fmt.Println(id, name);
	//插入一行数据
	ret, _ := db.Exec("insert into test(id,name) values(null, '444')");
	//获取插入ID
	ins_id, _ := ret.LastInsertId();
	fmt.Println(ins_id);
	//更新数据
	ret2, _ := db.Exec("update test set name = '000' where id > ?", 2);
	//获取影响行数
	aff_nums, _ := ret2.RowsAffected();
	fmt.Println(aff_nums);
	//删除数据
	ret3, _ := db.Exec("delete from test where id = ?", 3);
	//获取影响行数
	del_nums, _ := ret3.RowsAffected();
	fmt.Println(del_nums);
	//预处理语句
	stmt, _ := db.Prepare("select id,name from test where id = ?");
	rows4, _ := stmt.Query(3);
	//注意这里需要Next()下,不然下面取不到值
	rows4.Next();
	rows4.Scan(&id, &name);
	fmt.Println(id, name);
	stmt2, _ := db.Prepare("insert into test values(null, ?, ?)");
	rows5, _ := stmt2.Exec("666", 66);
	fmt.Println(rows5.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();
	}
}

免责声明:文章转载自《go语言中操作mysql的方法》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇linux 查看系统资源使用信息的一些命令集合EF Code First 数据库迁移Migration剖析下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

MySQL单表最大限制

  想把一个项目的数据库导出来,然后倒入到自己熟悉的MySQL数据库中进行运行和调试。导出来后,发现sql文件整整有12G多大,忽然想起来,MySQL好像有个叫做容量限制的神奇特性,但是忘了上限是多少了,所以查阅资料得出了如下结果:   在老版本的 MySQL 3.22 中,MySQL的单表限大小为4GB,当时的MySQL的存储引擎还是ISAM存储引擎。但...

MySQL 行锁 表锁机制

MySQL 表锁和行锁机制 行锁变表锁,是福还是坑?如果你不清楚MySQL加锁的原理,你会被它整的很惨!不知坑在何方?没事,我来给你们标记几个坑。遇到了可别乱踩。通过本章内容,带你学习MySQL的行锁,表锁,两种锁的优缺点,行锁变表锁的原因,以及开发中需要注意的事项。还在等啥?经验等你来拿! MySQL的存储引擎是从MyISAM到InnoDB,锁从表锁到行...

Hive 安装配置

实验简介 本次课程学习了如何安装配置 Hive。 一、实验环境说明 1. 环境登录 无需密码自动登录,系统用户名shiyanlou,密码shiyanlou 2. 环境介绍 本实验环境采用带桌面的Ubuntu Linux环境,实验中会用到桌面上的程序: XfceTerminal: Linux命令行终端,打开后会进入Bash环境,可以使用Linux命令;...

安装mysql

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下公司。MySQL 最流行的关系型数据库管理系统,在 WEB 应用方面MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。 一、Window版本 1、下载 1 MyS...

使用sonar进行代码质量检查

最近公司要求,学习了一下使用sonar进行代码分析检查。其中走了许多坑,配置也崩溃好几次。。。因此写下详细步骤以防以后再碰到这样的坑 一、安装Sonar 环境:Windows10,sonarqube6.7,java1.8,MySQL5.7.1  (注:用来检查java1.8以下的项目依旧可以使用,但是环境变量得是1.8的才能启动,我本次使用检查的项目就是j...

Centos7 安装 MySQL5.7

Centos7 安装 MySQL5.7 一、环境介绍 1.安装包版本介绍 MySQL 有三种安装方式:RPM安装、二进制包安装、源码包安装。我们这篇文章以二进制方式安装MySQL 软件名称 版本 系统版本 CentOS Linux release 7.2.1511 (Core) MySQL mysql-5.7.18-linux-glibc2....