数据库, 事务的ACID特性, 并发控制, 隔离级别, 乐观锁和悲观锁

ACID:

原子性(Atomicity): 一个事务中,所有操作全部完成或全部失败。

一致性(Consistency): 事务开始和结束之后,数据的完整性没有被破坏。

隔离性(Isolation): 允许多个事务同时对数据库进行修改和读写。

持久性(Durability): 事务结束之后,修改时永久的,不会丢失。 

 

如果不对事务进行并发控制会产生哪些后果

  • 幻读(phantom read):一个事务第二次读,读出来第一次没有的结果。
  • 非重复读(nonrepeatable read):一个事务重复读两次出现不同的结果。
  • 脏读(dirty read): 一个事务读取到另一个事务没有提交的修改。
  • 修改丢失(lost update): 并发写入造成其中一些修改丢失。

 

为了解决并发控制异常, 定义了四种隔离级别

  • 读未提交: 别的事务可以读取到未提交读改变。
  • 读已提交:只能读取已经提交的数据。
  • 可重复读:同一个事务先后查询的结果一样。
  • 串行化: 事务完全串行化的执行,隔离级别最高,执行效率最低。

 

如何解决数据库会有数据重复问题

  • 使用数据库唯一索引
  • 使用队列执行异步写入
  • 使用redis等实现分布式锁

 

乐观锁和悲观锁

  • 悲观锁:先获取锁再进行操作。一锁二查三更新( select for updete)
  • 乐观锁: 先修改,更新的时候发现数据已经变了就会滚(check and set) 一般通过版本号和时间戳实现。
  • 需要根据响应速度、冲突频率、重试代价来判断使用哪一种。

 

数据库, 事务的ACID特性, 并发控制, 隔离级别, 乐观锁和悲观锁

上一篇:(2021.12.18自认为思路得到深化不再只是单纯写步骤说明而是会讲明白完成难点与解决思路)leetcode1518换酒问题(c语言)(官方答案手把手解析)


下一篇:【快乐水题】1518. 换酒问题