数据库-事务

什么是数据库的事务

事务是一系列的数据库操作,是数据库应用的基本逻辑单位,事务由事务开始(begin transaction)和事务结束(end transaction)之间执行的全体操作组成。

事务的特性

事务具有如下特性:(其中原子性最为重要)
1、原子性(atomicity) 一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。(同生共死)
2、一致性(consistency) 事务必须是使数据库从一个一致性状态变到另一个一致性状态。
3、隔离性(isolation) 一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。(相互独立,互不影响)
4、持久性(durability) 持续性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。

事务常用语句

  • Begin Transaction:标记事务开始。
  • Commit Transaction:事务已经成功执行,数据已经处理妥当。
  • Rollback Transaction:数据处理过程中出错,回滚到没有处理之前的数据状态,或回滚到事务内部的保存点。
  • Save Transaction:事务内部设置的保存点,就是事务可以不全部回滚,只回滚到这里,保证事务内部不出错的前提下。

事务常用操作

  1. 开启事务:start transaction;
  2. 回滚:rollback;
  3. 提交:commit;

事务提交的两种方式

  1. 自动提交(执行mysql的一条DML语句就会自动提交一个事务)
  2. 手动提交(先开启事务,然后再提交)

事务的隔离级别

1.为什么要设置隔离级别

不同的事务之间是隔离的,相互独立的。但是如果多个事务操作同一批数据,则会导致一些严重的问题,我们可以通过设置不同的隔离级别来解决这些问题。
(ps:这就有点像我们不同班级的学生在不同的教室上着课一样,假设我们班在上音乐课,隔壁班在上数学课,我们和隔壁班之间隔着一堵墙,但假设墙的材质不是很好,隔壁班可以清清楚楚的听见我们在上音乐课,我们班也能清楚的听到隔壁班老师在讲什么数学题目,这时就会引发一些问题,我们班还好,影响不是很大,但是隔壁班就…这边上着数学课,看着一大堆看不懂的公式,还挺不清楚老师在讲啥,耳边全是那“动听”的音乐,这后果可想而知。)

2.存在的问题

  • 脏读:一个事务,读取到另一个事务中没有提交的数据
    (ps:其实就有点像被污染的意思,举一个不恰当的例子,假设你家的厕所和你家的厨房只隔了一块布,你妈妈在炒菜的时候,你由于肚子疼,在上厕所,你在厕所里用力一闻,emm…,真想,你妈妈在外面炒菜,然后想闻一下菜香不香,结果…,咦~,真臭,这就出大问题了,然后,然后你就(手动狗头))
  • 不可重复读:在同一个事务中,两次读取到的数据不一样
  • 幻读:一个事务查询数据表中的数据,另一个事务添加一个数据,第一个事务查询不到自己的修改(就像出现幻觉)

3.隔离级别

1.read uncommitted :只读但未提交
会产生脏读、不可重复读、幻读的问题

  1. read committed : 读了的同时也提交
    会产生不可重复读、幻读的问题

  2. repeatable read : 可重复读
    会产生幻读的问题

  3. serializable : 串行化
    基本上可以解决所有的问题

注意:
隔离级别从小到大(read uncommitted -> serializable) 安全性越来越高,执行效率越来越低。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值