数据库
数据库知识梳理
什么是数据库?
数据的仓库 高效的保存和查询数据
为什么要 保存和查询数据 如何保证数据被正常存储 和 如何查询数据?
保存数据:系统能长期使用和分析这些数据,
查询数据: 用户能根据条件快速找出需要的信息
如何保证数据正确被保存和正确的查询数据?
- 数据库事务
- 约束
- 日志
- 数据备份
- DBMS
什么是数据库事务
保证一组操作要么全部成功、要么全部失败的机制,核心用于保证数据一致性。
事务的四大特性:
ACID
为什么事务可以避免并发冲突?
隔离机制: 数据库的隔离级别 + 锁机制
事务的隔离级别:
自上向下 性能由高到低
- 读未提交:虽然级别最低 但也有它的作用。实时监控数据的变化, 对数据一致性要求不严格,允许读到脏数据但能换取速度。
- 读已提交 : 事务只能读导已经提交的数据(避免脏读)
- 可重复读 :在事务内对同一行多次读取是一样的(其他事务不能修改)
- 可串行化: 对读的范围加 锁 拒绝其它插入
对于可串行化:
在某些数据库(如 MySQL)用强锁机制实现。
在 PostgreSQL 中通过MVCC + 并发冲突检测(SSI)实现,更智能但也有事务被中止的风险。
并发事务产生的问题:
脏读: 读到未提交的数据
不可重复读: 同一次查询 两次读的结果不同
疑惑: 不可重复读 怎么了? A读100 b修改为50 再次读取不应该就是50吗 难道还要让他读到100?
解答: 在事务A未提交时,事务B提交了修改,导致事务A中同一数据多次读取结果不一致,破坏了事务的隔离性,可能导致逻辑错误或数据不稳定。
幻读: 查询范围内数据被别人新增
因为这些问题 定义了 四种隔离级别 去 控制他们
数据库锁机制
存储引擎
负责存储、处理和检索数据的核心组件
应对不同的场景 , 不同的场景会用到不同的存储引擎
数据的物理结构 , 索引 , 查询的实现方式
PG相比于MYSQL
Postgres:
MVCC(多版本并发控制): PostgreSQL 使用 MVCC 来实现事务隔离,通过为每个事务创建数据快照(版本)来避免读写冲突,默认隔离级别是读已提交,但可轻松配置为可重复读或串行化。
行级锁:
死锁检测: