(十)事务

目录

1定义

2 性质

①原子性

②隔离性

③持久性

④一致性

3并发执行优缺点

①不可重复读(前后多次读取,数据内容不一致)

②幻读(前后多次读取,数据总量不一致)

③脏读(读取未提交数据)

4调度

5事务隔离级别

①读未提交

②读已提交(大部分数据库默认的隔离级别)

③可重复读(Mysql的默认隔离级别就是Repeatable read)

④可串行化


1定义

数据库事务就是一组针对数据库的操作(可能是访问或者更新数据),这些操作要么不做要么全做。

2 性质

①原子性

和事务有关的sql语句要不不执行,要不全部执行。通过恢复系统实现。

②隔离性

各个事务之间不互相影响,彼此是隔离的。通过并发系统实现。

③持久性

一个事务一旦提交,它对于数据库的影响是永久的。通过恢复系统实现。

④一致性

事务执行前数据库处于一致性状态(数据正确,符合约束),事务执行后数据库也处于一致性状态(通过并发控制系统实现)。

3并发执行优缺点

好处:提高系统吞吐量,减少平均响应;坏处:破坏数据库一致性。

可能出现问题:

①不可重复读(前后多次读取,数据内容不一致)

      事务多次读取的结果不一致,在两次读取之间数据被修改导致事务读到和上次不一样的结果。

②幻读(前后多次读取,数据总量不一致)

      事务A在执行读取操作,需要两次读取某些记录,前一次查询数据总量后,此时事务B执行了新增或删除数据的操作并提交后,这个时候事务A读取记录时发现这些记录消失了或多了,就像产生了幻觉一样。

③脏读(读取未提交数据)

       一个事务对数据进行了修改(写入磁盘),但未提交,另一个事务可以读取到未提交的数据。如果第一个事务发生某些状况回滚了,第二个事务读到的了脏数据。

4调度

     调度是指事务的执行顺序,分为串行调度,属于同一事务的指令紧挨在一起,并行调度,不同事物可交叉执行,并行调度在某种意义上等价于一个串行调度

冲突可串行化

冲突指令,当两条指令对同一数据进行操作,两条指令中至少一个实write操作时称两条指令是冲突的。

非冲突指令交换顺序不会影响最终调度结果。

冲突等价:如果调度s经过一系列非冲突指令交换称调度s',则称s与s'调度 冲突等价。

当一个调度s与一个串行调度冲突等价的时候,则该调度室冲突可串行化的。

优先图判定冲突可串行化:

       冲突指令(对同一数据的两个操作其中一个是写)T1先发生,则记T1->T2,当优先图无环时表示事务的这个调度是冲突可串行化的。等价于优先图的拓扑排序。

5事务隔离级别

①读未提交

       允许读取未提交数据,当事务A对数据更新时,不允许其他事务来更新,但允许读。(所以脏读,幻读,不可重复读均会出现)。

②读已提交(大部分数据库默认的隔离级别)

       允许读取已经提交数据,当事务A进行数据更新时不允许其他事务对数据进行任何操作(包括读)(所以不可能出现脏读,回滚之后才提交),但事务A读的时候,其他事务可以进行更新读取,(这导致了不可重复读和幻读)。

③可重复读(Mysql的默认隔离级别就是Repeatable read)

    只允许读已提交数据,且一个事务两次读取一个数据间,其他事务不得更新该数据(能防住一部分幻读)。

④可串行化

所有事务排队执行,并发性能明显下降。读写数据都会锁住整张表。

参考:https://www.cnblogs.com/CoderAyu/p/11525408.html

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值