数据库原理

ACID四大特性

  • 原子性(Atomicity):事务被视为不可分割的最小单元,要么全部提交,要么全部失败回滚
  • 一致性(Consistency):事务执行前后保持一致性,在一致性状态下,所有事务对一个数据的读取结果都是一致的.
  • 隔离性(Isolation):一个事务所做的修改在提交前对所有其他事务都是不可见的.
  • 持久性(Durability):一旦事务提交,则其所做的修改都将永远保存在数据库中.及时系统发生崩溃,事务执行的结果也不能丢失.通过数据库备份和恢复来保证持久性.

并发一致性问题

  • 丢失修改:T1,T2两个事务都对同一份数据进行修改,后修改的T2会覆盖前面T1的操作
  • 读脏数据:T1修改一个数据,T2随后读取,但T1撤销这次修改,那么T2读到的数据就是脏数据
  • 不可重复读:T2读取一个数据,T1对这个数据做出修改,T2再次读取,两次读取的数据不同
  • 幻影读(范围的不可重复读):T1读取范围数据,T2在这范围内修改数据,T1再读,两次读取数据不同.

封锁

  • 行级锁
    • 排它锁(X锁,写锁)
    • 共享锁(S锁,读锁)
  • 表级锁
    • 意向锁:支持多粒度锁IX/IS
    • 锁应该只锁需要并发的部分,锁的内容越少则并发程度越高.但加锁消耗资源,锁越多/封锁粒度越小,则开销越大
  • 三级封锁协议
    • 一级封锁协议:事务T需要修改数据必须加X锁,知道T结束才能释放(丢失修改问题)
    • 二级封锁协议:一级 + 读取是必须加S锁,读完马上释放锁(脏读数据问题)
    • 三级封锁协议:一级 + 读取是必须加S锁,事务结束才释放锁(不可重复读)

隔离级别

  • 未提交读:事务的修改,即使没有提交也对其他事务是可见的
  • 提交读:一个事务只能读取已经提交的事务的修改
  • 可重复读:保证在同一事务中多次读取的结果都是一样的
  • 可串行化:强制事务串行化执行

范式

  • 第一范式:属性字段不可分割
  • 第二范式:每个非主属性完全以来于键码,每张表只做一件事
  • 第三范式:非主属性不传递依赖于键码,所有字段与主键直接相关
  • BC范式:所有属性不传递依赖于键码

约束

  • 键码:用于表示唯一实体
  • 单值约束:某个属性是唯一的
  • 引用完整性约束:一个实体属性引用的值必须在另一个实体中存在
  • 域约束:某个属性的值在特定的范围内
  • 一般约束:例如大小约束,数量约束
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值