所属分类:php教程
千万级数据并发如何处理?进入学习
Go语言操作MySQL数据库:
安装go操作MySQL的驱动
1 | go get -u -v github.com/go-sql-driver/mysql |
go操作MySQL数据库
导包
1 | import _ "github.com/go-sql-driver/mysql" |
程序在操作数据库的时候只需要用到database/sql,而不需要直接使用数据库驱动,所以程序在导入数据库驱动的时候将这个包的名字设置成下划线。
连接数据库,用sql.Open()方法,open()方法的第一个参数是驱动名称,第二个参数是连接字符串,格式为:用户名:密码@tcp(ip:port)/数据库名称?编码方式,返回值是连接对象和错误信息,例如:
1 2 | conn,err := sql.Open( "mysql" , "root:123456@tcp(127.0.0.1:3306)/test?charset=utf8" ) defer conn.Close() //随手关闭数据库是个好习惯 |
执行数据库操作。
数据库的主要方法有:
Query 执行数据库的查询操作,例如一个Select语句,返回数据类型为*Rows
QueryRow 执行数据库至多返回一条数据,返回数据类型为*Row
Exec 执行数不返回任何rows的据库语句,例如delete操作
PrePare 准备一个数据库query操作,返回一个*Stmt,用于后续query或Exec。这个Stmt可以被多次执行,或者并发执行
创建表
exec函数如下:
1 | func (db *DB) Exec (query string, args ... interface {}) (Result, error) |
创建表的方法也是Exec(),参数是SQL语句,返回值是结果集和错误信息.
其中result包含的内容有:
1 2 3 4 | type Result interface { LastInsertId() (int64, error) RowsAffected() (int64, error) } |
RowsAffected() 函数,可以获得成功执行SQL后对数据库所影响的行数。
1 2 | res ,err:= conn. Exec ( "create table user(name VARCHAR(40),pwd VARCHAR(40))" ) beego.Info( "create table result=" ,res.,err) |
增删改操作
执行增删改操作语句的是Exec(),参数是SQL语句,返回值是结果集和错误信息,通过对结果集的判断,得到执行结果的信息。以插入数据为例代码如下:
1 2 3 | res,_:=stmt. Exec ( "insert user(name,pwd) values (?,?)" , "tony" , "tony" ) count ,_:=res.RowsAffected() this.Ctx.WriteString(strconv.Itoa(int( count ))) |
查询操作
用的函数是Query()和QueryRow.
1 2 | func (db *DB) QueryRow(query string, args ... interface {}) *Row func (db *DB) Query(query string, args ... interface {}) (*Rows, error) |
利用QueryRow实现单行查询,能确定该SQL语句的查询结果为一条记录。将结果中的字段值使用Scan()函数依次提取。
利用Query实现多行数据查询,返回值为查询结果集和错误信息。通过next和Scan函数一起将数据取出来
代码如下:
单行查询:
1 2 3 4 | row:= conn.QueryRow(`select * from user where userName = "wyj" `) var name,pwd string row.Scan(&name,&pwd) beego.Info(name, "------" ,pwd) |
多行查询:
1 2 3 4 5 6 7 8 | data ,err :=conn.Query( "SELECT name from user" ) var userName string if err == nil{ for data.Next(){ data.Scan(&userName) beego.Info(userName) } } |
全部代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | //连接数据库 conn,err := sql.Open( "mysql" , "root:123456@tcp(127.0.0.1:3306)/testtest?charset=utf8" ) if err != nil{ beego.Info( "链接失败" ) } defer conn.Close() //建表 res ,err:= conn. Exec ( "create table user(userName VARCHAR(40),passwd VARCHAR(40))" ) beego.Info( "create table result=" ,res,err) //插入数据 res,err =conn. Exec ( "insert user(userName,passwd) values(?,?)" , "itcast" , "heima" ) beego.Info(res,err) //单行查询 row:= conn.QueryRow(`select * from user where userName = "wyj" `) var name,pwd string row.Scan(&name,&pwd) beego.Info(name, "------" ,pwd) //多行查询 data ,err :=conn.Query( "SELECT userName from user" ) var userName string if err == nil{ for data.Next(){ data.Scan(&userName) beego.Error(userName) } } |
更多go语言知识请关注zzsucai.comgo语言教程栏目。
以上就是Go语言中操作MySQL数据库的方法的详细内容,更多请关注zzsucai.com其它相关文章!