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

ACID:

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

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

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

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

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

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

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

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

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

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

乐观锁和悲观锁

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

猜你喜欢

转载自www.cnblogs.com/dairuiquan/p/12622652.html