这是我参与「第五届青训营 」伴学笔记创作活动的第 6 天
数据库分类:
数据库根据数据结构可分为关系型数据库和非关系型数据库。非关系型数据库中根据应用场景又可分为键值(Key-Value)数据库、列存储数据库、面向文档数据库、搜索引擎数据库等。
关系型数据库:
关系型数据库模型是把复杂的数据结构归结为简单的二元关系,典型产品:MySQL、SqlServer、Oracle、PostgreSQL、SQLite等。
非关系型数据库:
键值数据库是一种非关系数据库,它使用简单的键值方法来存储数据。键值数据库将数据存储为键值对集合,其中键作为唯一标识符。典型产品:Redis、Memcached等
Go语言操作数据库:
GO语言数据库框架
Gorm 是 Go 语言中实现对象和数据库映射的框架,可以有效地提高开发数据库应用的效率。
Gorm 主要用途是把 struct类型 和 数据库表 进行映射,使用简单方便。
因此,使用 Gorm 操作数据库的时候一般不需要直接手写 SQL 语句代码。
Gorm 是 Go 语言中实现对象和数据库映射的框架,可以有效地提高开发数据库应用的效率。
Gorm 主要用途是把 struct类型 和 数据库表 进行映射,使用简单方便。
因此,使用 Gorm 操作数据库的时候一般不需要直接手写 SQL 语句代码。
GO语言连接数据库需要下载一个连接Mysql的驱动
go get -u github.com/go-sql-driver/mysql
数据库连接:
package main
import (
"database/sql" //mysql的包
"fmt" //输入输入相关的包
_ "github.com/go-sql-driver/mysql" //导入包但不使用,init()
)
var db *sql.DB //定义一个sql.DB类型的指针用于接收sql.Open返回的 db指针类型的值
//Go连接Mysql示例
func initDB()(err error) {
//数据库连接数据集 //用户名:密码@tcp(ip:端口)/数据库的名字
db, err := sql.Open("mysql", "root:123456@tcp(127.0.0.1:3306)/user_tb1") //open不会检验用户名和密码
if err != nil {
return
}
err = db.Ping() //尝试连接数据库(检查 用户名:密码@tcp(ip:端口)/数据库 的名字是否正确)
if err != nil {
return
}
fmt.Println("连接数据库成功~")
}
查询操作:
//创建一个结构体方便对象管理
type user struct {
id int
name string
age int
}
//查询一条记录
func queryOne(id int){
//1.查询单挑记录的sql语句 ?是参数
sqlStr := "select id,name,age from user where id=?;"
//2.执行
rowObj := db.QueryRow(sqlStr, id) //从连接池里取一个连接出来去数据库查询单挑记录
//3.拿到结果
var u1 user
rowObj.Scan(&u1.id, &u1.name, &u1.age)
//打印结果
fmt.Printf("u1:%#v\n", u1)
}
//查询多条记录
func queryMore(n int) {
//1.sql语句
sqlStr := "select id,name,age from user where id >?;"
//2.执行
rows, err := db.Query(sqlStr, n)
if err != nil {
fmt.Printf("%s query failed,err:%v\n", sqlStr, err)
return
}
//3一定要关闭rows
defer rows.Close()
//4.循环取值
for rows.Next() {
var u1 user
rows.Scan(&u1.id, &u1.name, &u1.age)
fmt.Printf("u1:%#v\n", u1)
}
}