数据库认识与基础|青训营笔记

62 阅读2分钟

数据库

  1. 持久化: 我们不可能每次登录app都要重新注册,为了确保不那么麻烦,我们数据持久化后,下次直接登
  2. 整个:用户界面--》数据(姓名、密码)--》后端服务器(处理这条数据)--》数据库--》其他系统

数据库工作:

  1. 校验数据的合法性:查看小明是否存在
  2. 修改内存:用高效的数据结构组织数据
  3. 写入存储介质:寿命&性能写入硬件(重点强调:寿命)

存储系统:

  1. 缓存【很重要】

  2. 拷贝【很昂贵】

  3. 硬件设备五花八门,需要有抽象统一的接入层

  4. RAID技术:(redundant array of inexpensive disks)

    1. 价格:单块大容量磁盘 > 多块小容量磁盘
    2. 性能:单块 > 多块并发写入
    3. 容错:单块有限,不安全
    4. RAID 0、RAID 1、RAID 0+1

关系: Relation = 集合 = 反应了事物之间的关系。 关系模型。 关系代数。

SQL = 一种DSL = 关系做运算的语言

数据库:

  1. 关系型数据库:就是一种存储系统

    1. 结构化数据友好
    2. 支持事务
    3. 支持复杂查询语言(SQL)
  2. 非关系型数据库:不要求严格的结构化数据

    1. 半结构化数据友好
    2. 可能支持事务
    3. 可能支持复杂查询语言

uTools_1684220062370.png

事务:ACID

  1. Atomicity: 事务要么全做,要么不做
  2. Consistency: 数据状态一致性
  3. Isolation: 并发执行
  4. Durability: 成功提交后,保证数据持久性

存储 & 数据库

单机存储系统:本地文件系统、key-value

Database/sql

import (
	"database/sql"
	
	"github.com/go-sql-driver/mysql"    // 使用driver + DSN
)

func main () {
	db, err := sql.Open("mysql", "user:password@tcp(127.0.0.1:3306)/hello")
	// 初始化 DB数据库连接
	
	rows, err := db.Querry ("select id, name from users where id = ?", 1)
	if err != nil {
		// xxx
	}
	defer rows.Close()
	// 执行一条SQL,通过rows取回返回的数据处理完毕,需要释放链接Close()防止内存泄漏
	
	var users []User
	for rows.Nexts() { // 不断获取下一跳数据
		var user User
		err := rows.Scan(&user.ID, &user.Name) // 获取每一个元素
		
		if err != nil {		// 检验
			//xxx
		}
		
		users = append (users, user)   
	}
	// 数据、错误处理
	
	if rows.Err() != nil {	
		// ...
	} 
	// 比较重要的错误处理。 很容易遗漏
}