go操作mysql数据库

go操作mysql数据库

示例数据库结构

数据库test,用户表userinfo,关联用户信息表userdetail

1
2
3
4
5
6
7
8
9
10
11
12
13
14
CREATE TABLE `userinfo` (
`uid` INT(10) NOT NULL AUTO_INCREMENT,
`username` VARCHAR(64) NULL DEFAULT NULL,
`department` VARCHAR(64) NULL DEFAULT NULL,
`created` DATE NULL DEFAULT NULL,
PRIMARY KEY (`uid`)
);

CREATE TABLE `userdetail` (
`uid` INT(10) NOT NULL DEFAULT '0',
`intro` TEXT NULL,
`profile` TEXT NULL,
PRIMARY KEY (`uid`)
)

操作数据库

1 引入库文件
1
2
3
4
import (
"database/sql"
_ "github.com/go-sql-driver/mysql"
)
2 连接数据库
1
2
3
4
5
6
7
8
9
//host 数据库地址
//port mysql端口
//database 连接的数据库
db,err := sql.open("mysql","用户名:密码@tcp(host:port)/database")
if err != nil {
panic(err)
}
//关闭数据库
defer db.Close()
3 插入数据
1
2
3
4
5
6
//插入语句预处理
stmt,err := db.Prepare("INSERT userinfo set username=?,department=?,created_at=?")
//插入数据
res,err := stmt.Exec("test","销售部门","2018-05-10")
//获取上次插入的id
id,err := res.lastInsertId()

4 查询数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//获取数据库的所有字段
res,err := db.Query("select * from userinfo")
res.Columns()

//获取单挑数据
res := db.QueryRow("select * from userinfo")
res.scan(&uid,&username,&department,&created_at)

//获取多条数据结果
stmt,err := db.Prepare("select * from userinfo where uid=?")
res,err := stmt.Query(1)
//循环获取单挑数据
for res.Next(){
res.scan(&uid,&username,&department,&created_at)
}

5 修改数据

1
2
3
4
stmt,_ := db.Prepare("update userinfo set username=? where id = ?")
res,_ := stmt.Exec("test",1)
//受影响的行数
res.RowsAffected()

6 删除数据

1
2
3
stmt,_ := db.Prepare("Delete from userinfo where uid=?")
res,_ := stmt.Exec(1)
res.RowsAffected()