首页 > 数据库技术 > 详细

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

时间:2020-04-02 23:01:02      阅读:78      评论:0      收藏:0      [点我收藏+]

ACID:

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

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

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

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

 

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

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

 

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

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

 

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

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

 

乐观锁和悲观锁

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

 

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

原文:https://www.cnblogs.com/dairuiquan/p/12622652.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!