目录
- 一、Mysql数据库
- 二、Golang操作Mysql
- 1. 现有test数据库表格user
- 2. 连接mysql数据库
- 2.1. 使用到的第三方库
- 2.2. 连接
- 3. SELECT数据库查询操作
- 4. Insert数据库插入操作
- 5. Update数据库更新操作
- 6. DELETE数据库删除操作
- 三、生成动态字段数据库查询结果
- 使用的是内置的库
一、Mysql数据库
为什么要使用数据库
- 一开始人手动记录数据,不能长期保存,追溯;
- 然后创建了文件系统,能够长期保存,但是查询追溯更新麻烦,数据可以发生冗余重复;
- 实现了数据库的方式,能够长期保存,方便查询,追溯,更新等等一系列操作,能设置一些约束进行数据的自我管控等等。
简单介绍下Mysql数据库的特点:关系型数据库、体积小、速度快、成本低、开源代码、中小网站适用、非常适合初学者学习
二、Golang操作Mysql
1. 现有test数据库表格user
2. 连接mysql数据库
2.1. 使用到的第三方库
github.com/go-sql-driver/mysql(驱动)
github.com/jmoiron/sqlx(对驱动的操作封装)
2.2. 连接
package main
import (
"fmt"
_ "github.com/go-sql-driver/mysql"
"github.com/jmoiron/sqlx"
)
func main() {
db, err := sqlx.Open("mysql", "username:password@(127.0.0.1:3306)/test?charset=utf8mb4")
if err != nil {
fmt.Println("open mysql failed,", err)
}
db.SetMaxIdleConns(5) //设置最大的空闲数
db.SetMaxOpenConns(15) //设置最大的连接数
}
//db, err := sqlx.Open("数据库类型", "用户名:密码@tcp(地址:端口)/数据库名")
3. SELECT数据库查询操作
package main
import (
"fmt"
_ "github.com/go-sql-driver/mysql"
"github.com/jmoiron/sqlx"
)
var db *sqlx.DB
func initDB() {
var err error
db, err = sqlx.Open("mysql", "username:password@(127.0.0.1:3306)/test?charset=utf8mb4&parseTime=true&loc=Local")
if err != nil {
fmt.Println("open mysql failed,", err)
}
db.SetMaxIdleConns(5)
db.SetMaxOpenConns(15)
}
type User struct {
Id int64 `db:"id"`
Name string `db:"name"`
Age int64 `db:"age"`
Sex string `db:"sex"`
}
func main() {
initDB()
defer db.Close()
var user []User
sqlStr := "SELECT * FROM user"
err := db.Select(&user, sqlStr)
if err != nil {
fmt.Println(err)
}
fmt.Println(user)
}
得到结果->
[{1 张三 20 男} {2 李四 21 女} {3 王五 25 男}]
4. Insert数据库插入操作
package main
import (
"fmt"
_ "github.com/go-sql-driver/mysql"
"github.com/jmoiron/sqlx"
)
var db *sqlx.DB
func initDB() {
var err error
db, err = sqlx.Open("mysql", "superxon:superxon@(172.20.3.12:3306)/test?charset=utf8mb4")
if err != nil {
fmt.Println("open mysql failed,", err)
}
db.SetMaxIdleConns(5)
db.SetMaxOpenConns(15)
}
type User struct {
Id int64 `db:"id"`
Name string `db:"name"`
Age int64 `db:"age"`
Sex string `db:"sex"`
}
func main() {
initDB()
defer db.Close()
var user = User{
Name: "小六",
Age: 18,
Sex: "女",
}
sqlStr := "INSERT INTO user(name, age, sex) VALUES (?,?,?)"
res, err := db.Exec(sqlStr, user.Name, user.Age, user.Sex)
if err != nil {
fmt.Println(err)
}
c, _ := res.RowsAffected()
fmt.Println("有多少行被创建", c)
}
得到结果->
有多少行被创建 1
5. Update数据库更新操作
package main
import (
"fmt"
_ "github.com/go-sql-driver/mysql"
"github.com/jmoiron/sqlx"
)
var db *sqlx.DB
func initDB() {
var err error
db, err = sqlx.Open("mysql", "superxon:superxon@(172.20.3.12:3306)/test?charset=utf8mb4")
if err != nil {
fmt.Println("open mysql failed,", err)
}
db.SetMaxIdleConns(5)
db.SetMaxOpenConns(15)
}
type User struct {
Id int64 `db:"id"`
Name string `db:"name"`
Age int64 `db:"age"`
Sex string `db:"sex"`
}
func main() {
initDB()
defer db.Close()
var user = User{
Id: 4,
Age: 20,
}
sqlStr := "UPDATE user SET age=? WHERE id=?"
res, err := db.Exec(sqlStr, user.Age, user.Id)
if err != nil {
fmt.Println(err)
}
c, _ := res.RowsAffected()
fmt.Println("有多少行被更改", c)
}
得到结果->
有多少行被更改 1
6. DELETE数据库删除操作
package main
import (
"fmt"
_ "github.com/go-sql-driver/mysql"
"github.com/jmoiron/sqlx"
)
var db *sqlx.DB
func initDB() {
var err error
db, err = sqlx.Open("mysql", "superxon:superxon@(172.20.3.12:3306)/test?charset=utf8mb4")
if err != nil {
fmt.Println("open mysql failed,", err)
}
db.SetMaxIdleConns(5)
db.SetMaxOpenConns(15)
}
type User struct {
Id int64 `db:"id"`
Name string `db:"name"`
Age int64 `db:"age"`
Sex string `db:"sex"`
}
func main() {
initDB()
defer db.Close()
deleteId := 3
sqlStr := "DELETE FROM user WHERE id=?"
res, err := db.Exec(sqlStr, deleteId)
if err != nil {
fmt.Println(err)
}
c, _ := res.RowsAffected()
fmt.Println("有多少行被删除", c)
}
得到结果->
有多少行被删除 1
三、生成动态字段数据库查询结果
在项目中经常会遇到一个问题:在同一个函数中,查询不同的表格,生成不同的结果,每次都要重新构建结构体
相关阅读 >>
更多相关阅读请进入《sql》频道 >>
机械工业出版社
本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。