数据库的事务

ACID,事务应该具有的四个属性

  • Atomicity(原子性),一个事务是一个不可分割的工作单位,事务中包括的各个操作要么都做,要么都不做

  • Consistency(一致性),事务必须是使数据库从一个一致性状态转变到另一个一致性状态。一致性与原子性是密切相关的

  • Isolation(隔离型),一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间是不能相互干扰的

  • Durability(持久性),一个事务一旦提交,他对数据库中的数据的改变就是永久性的。接下来的其他操作或故障不应该对其有任何影响

事务的并发问题

  • 脏读:事务A读取了事务B更新的数据,然后B回滚操作,那么A读取到的数据就是脏数据

  • 不可重复读:事务A多次读取同一数据,事务B在事务A多次读取的过程中,对数据做了更新操作并提交,导致事务A多次读取同一条数据的结果不一致

  • 幻读:事务A首先根据条件索引得到N条数据,然后事务B改变了这N条数据之外的M条或者增添了M条符合事务A搜索条件的数据,导致事务A再次搜索发现有N+M条数据了,就产生了幻读。

事务的隔离级别

  • 未提交读(read uncommited)脏读
    • 事务中的修改,即使没有提交,其他事务也可以看得到,会导致“脏读”、“幻读”和“不可重复读取”。
  • 已提交读(read comited)不可重复读
    • 大多数主流数据库的默认事务等级,保证了一个事务不会读到另一个并行事务已修改但未提交的数据,避免了脏读,但是不能避免幻读和不可重复读。
  • 可重复读(repeatable read)
    • 保证了一个事务不会修改已经由另一个事务读取但未提交的数据。避免脏读和不可重复读的问题,但是不能避免幻读。
  • 串行化(serializable)
    • 最严格的级别,事务串行执行,资源消耗最大
事务隔离级别
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容