数据库 | 青训营笔记

56 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 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)
    }
}