前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >数据库事务ACID特性

数据库事务ACID特性

作者头像
用户2038589
发布2018-09-06 15:40:44
1.2K0
发布2018-09-06 15:40:44
举报
文章被收录于专栏:青青天空树青青天空树

一、 数据库事务四大特性ACID

1、 原子性(Atomicity)

  原子性是指事务包含的所有操作要么全部执行成功,否则失败回滚,回到未执行事务前的状态。

2、一致性(Consistency)

  一致性是指事务必须使数据库从一个一致性状态变成另一个一致性状态,也就是事务执行前后必须处于一致性状态。   以转账为例,假设用户A和B两者的钱加起来是5000,那么不管A和B之间如何转账,转多少次,事务结束后两个用户的钱加起来应该还得是5000,这就是事务的一致性。

3、 隔离性(Isolation)

  隔离性是当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其它的事务操作所干扰,多个并发事务之间要相互隔离。

  既要达到这么一种效果:对于任意的两个并发的事务T1和T2,它们相互之间感觉不到对方正在并发的执行,关于事务的隔离性数据库提供了多种隔离级别,假设我们不考虑隔离性会发生什么问题呢?

  • 脏读 在一个事务中对数据做了修改,但还未提交,这是其他人读取这个数据,得到的是修改后的值,一旦事务回滚了,再次读取时发现值又变了。
  • 不可重复读 不可重复读是在对数据库中的某个数据重复查询时,返回了不同的查询结果,这是由于在查询期间,被另一个事物修改并提交了。和脏读的区别是脏读读取的是另一个事物未提交的脏数据,不可重复读读取的是前一事物已提交的数据。通常情况下不可重复读并不是问题。
  • 幻读(虚读) 幻读是事物非独立执行时发生的一种现象,例如事物T1对一个表中所有的行的某个数据设置为了1,这时还有一个其他操作向该表中插入了一行数据,并且数据不为1,如果操作T1的用户查看刚刚修改的数据就会发现还有一行没有修改,其实这行是在修改操作完毕后新加入的一条数据。

4、 持久性

  持久性是指一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即使在数据库系统遇到故障的情况下也不会丢失提交事务的操作。

   例如我们在使用jdbc操作数据库时,在提交事务方法成功后,就可以认定事务已经被正确提交,即使数据发生重大故障,操作也会正确完成。

二、 四种隔离级别

  Mysql数据库提供了四种数据库的隔离级别:

  1. Serializable(串行化):对表加了读写锁,每次读写都需要获取共享锁,丧失了并发速度,可避免脏读,不可重复读,幻读的发生
  2. Repeatable read(可重复读):在同一个事务内的查询都是事务开始时刻一致的,可避免脏读、不可重复读的发生
  3. Read committed(读已提交):只能读取到已经提交的数据,避免了脏读的发生。
  4. Read uncommitted(读未提交):所有都能读取到,啥都无法避免

  Mysql默认的事务隔离级别是2。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-07-24 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、 数据库事务四大特性ACID
    • 1、 原子性(Atomicity)
      • 2、一致性(Consistency)
        • 3、 隔离性(Isolation)
          • 4、 持久性
          • 二、 四种隔离级别
          相关产品与服务
          云数据库 SQL Server
          腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档