所属分类:php教程
千万级数据并发如何处理?进入学习
go操作mysql数据库,用的库是 go-sql-driver/mysql,安装直接go get
go get -u github.com/go-sql-driver/mysql
sql.DB
DB类型可用的函数有:
1、Query(c string, args interface{} …) (*Rows, error),常用于SELECT语句
2、Exec(c string, args interface{} …) (*Rows, error),常用与UPDATE和INSERT
3、Prepare(c string) (*Stmt, error),其他语句,也可以用于执行上述语句,返回Stmt指针
sql.Stmt
Stmt是准备好的语句,可以执行数据库语句操作,常用函数有:
Exec(args interface{} …) (Result, error),给定参数并执行准备好的语句,然后返回语句的总结果
//... stmt, err := db.Perpare("INSERT INTO User(user,pwd) VALUES (?, ?)") if err != nil { panic(err) } defer stmt.Close() _, err := stmt.Exec("laoli", "123456") if err != nil { panic(err) } //... //... stmt, err := db.Perpare("DELETE FROM User") if err != nil { panic(err) } defer stmt.Close() _, err := stmt.Exec() if err != nil { panic(err) }
Query(args interface{} …) (*Rows, error),给定参数并执行准备好的语句,返回行结果,比方说SELECT操作就必须用这个函数调用。
sql.Rows
Rows是sql语句执行返回的表,Rows会占用缓存,Rows.Next()里,如果返回false,则会自动释放缓存。
看一下源码:
// 源码 func (rs *Rows) Next() bool { var doClose, ok bool withLock(rs.closemu.RLocker(), func() { doClose, ok = rs.nextLocked() }) if doClose { rs.Close() //在这里释放掉了 } return ok }
例子:
package main import ( "database/sql" _ "github.com/go-sql-driver/mysql" ) var db *sql.DB func mian() { db = sql.Open("mysql", "root:123456@tcp(127.0.0.1)/test") if err := db.Ping(); err != nil { panic(err) } } func Insert() { _, err := db.Exec("INSERT INTO User(user, pwd) VALUE (?, ?)", "laowang", "123456") if err != nil { panic(err) } } func SelectRow() { rows, err := db.Query("SELECT * FROM User WHERE user=?", "laowang") if err != nil { panic(err) } //defer rows.Close() //如果后面代码没有循环调用rows.Next(),就需要手动在这里释放一下,不然会一直占用缓存 var user string var pwd string for rows.Next() { row.Scan(&user, &pwd) } print(user, pwd) }
更多go语言知识请关注zzsucai.comgo语言教程栏目。
以上就是golang mysql操作介绍的详细内容,更多请关注zzsucai.com其它相关文章!