数据库知识梳理

什么是数据库?

数据的仓库 高效的保存和查询数据

为什么要 保存和查询数据 如何保证数据被正常存储 和 如何查询数据?

保存数据:系统能长期使用和分析这些数据,

查询数据: 用户能根据条件快速找出需要的信息

如何保证数据正确被保存和正确的查询数据?

  1. 数据库事务
  2. 约束
  3. 日志
  4. 数据备份
  5. DBMS

什么是数据库事务

保证一组操作要么全部成功、要么全部失败的机制,核心用于保证数据一致性。

事务的四大特性:

ACID

为什么事务可以避免并发冲突?

隔离机制: 数据库的隔离级别 + 锁机制

事务的隔离级别:

自上向下 性能由高到低

  • 读未提交:虽然级别最低 但也有它的作用。实时监控数据的变化, 对数据一致性要求不严格,允许读到脏数据但能换取速度。
  • 读已提交 : 事务只能读导已经提交的数据(避免脏读)
  • 可重复读 :在事务内对同一行多次读取是一样的(其他事务不能修改)
  • 可串行化: 对读的范围加 锁 拒绝其它插入

对于可串行化:

在某些数据库(如 MySQL)用强锁机制实现。

在 PostgreSQL 中通过MVCC + 并发冲突检测(SSI)实现,更智能但也有事务被中止的风险。

并发事务产生的问题:

脏读: 读到未提交的数据

不可重复读: 同一次查询 两次读的结果不同

疑惑: 不可重复读 怎么了? A读100 b修改为50 再次读取不应该就是50吗 难道还要让他读到100?

解答: 在事务A未提交时,事务B提交了修改,导致事务A中同一数据多次读取结果不一致,破坏了事务的隔离性,可能导致逻辑错误或数据不稳定。

幻读: 查询范围内数据被别人新增

因为这些问题 定义了 四种隔离级别 去 控制他们

数据库锁机制

存储引擎

负责存储、处理和检索数据的核心组件

应对不同的场景 , 不同的场景会用到不同的存储引擎

数据的物理结构 , 索引 , 查询的实现方式

PG相比于MYSQL

Postgres:

MVCC(多版本并发控制): PostgreSQL 使用 MVCC 来实现事务隔离,通过为每个事务创建数据快照(版本)来避免读写冲突,默认隔离级别是读已提交,但可轻松配置为可重复读或串行化。

行级锁:

死锁检测: