数据库事务(一)

数据库事务那些事

这期跟大家聊聊数据库方面的内容,说起数据库一定会想到事务,那么今天就从数据库的事务开始说起。

数据库事务

数据库事务(Database Transaction)作为逻辑单元执行一系列操作,只有全部执行或者全部不执行。

数据库事务的特性

传说中的ACID

  • 原子性(Atomicity)——事务内部所有操作,执行结果只有全部成功或者全部不成功
  • 一致性(Consistency)——事务一定让数据库从一个一致性状态转换到另一个一致性状态
  • 隔离性(Isolation)——多个会话同时操作同一数据,每个会话之间的事务是隔离的,不会互相干扰
  • 持久性(Durability)——事务一旦提交,那么数据对于数据库来说是永久性的,即使遇到故障情况也不会丢失数据

数据库事务解决的问题

  • 脏读——一个事务处理过程中读取到其他未提交事务修改的数据
  • 不可重复读——一个事务内多次读取同一处数据,结果可能不一致的现象
  • 幻读——一个事务处理数据之后,其他事物也处理同一处数据,导致第一个事务的执行者再次查询的时候会发现出现幻觉了,因为出现了不符合预期的结果。

PS:个人认为不可重复读也属于幻读的一种,因为在同一个事物内多次读取无法保持一致,也是一种幻觉。

数据库事务隔离级别

  • Read uncommitted(读未提交)——就是说读取到了其他未提交的事务过程中处理的数据(中间数据),会导致数据不一致
  • Read committed(读已提交)——就是说读取到其他事务提交后的数据,导致无法在同一个事务内读取到相同的数据
  • Repeatable Read(可重复读)——就是说同一个事务内可以重复读取相同的数据不会受到其他事务提交的影响。
  • Serializable Read(序列化读)——就是说所有数据库事务都是顺序依次执行的,所以会规避之前提到的问题

总结

数据库事务的出现解决了部分数据库并发情况下会出现的问题,但是选择了比较高的隔离级别来解决问题,就会发现性能会有很大的损失,那么有没有比较好的解决方法来提高性能的基础上也能达到预期的效果呢?

之后会跟大家分享下MVCC的知识。

你可能感兴趣的:(数据库事务(一))