数据库(1)-事物的隔离级别

定义

事物是需要保持一致性的一批语句的集合,一个事物中的语句执行需要一定的时间,在此时间内对待外部变化的策略就是隔离级别.

事物的隔离级别有四种:读未提交,读已提交,可重复读,串行化.

安全性依次提高,性能依次下降.


1.读未提交

当事物隔离级别被设置为读未提交时,在此事物期间,外部事物未提交的更新可以被读取到.

所以会发生脏读.

  • 事物A
set tx_isolation=‘READ-UNCOMMITTED‘;
start TRANSACTION;
  • 事物B
start TRANSACTION;
update tx set num=10 where id=1;
  • 事物A
select * from tx;

结果:

1   40
2   2
3   3
4   4

2.读已提交

当事物隔离级别被设置为读已提交时,在此事物期间,外部事物已提交的更新可以被读取到.

如果外部事物有多个更新提交,那么每次读到的结果会有不同,即不可重复读.

  • 事物A
set tx_isolation=‘READ-COMMITTED‘;
start TRANSACTION;
  • 事物B
start TRANSACTION;
update tx set num=20 where id=1;
commit;
  • 事物A
select * from tx;

结果:

1   20
2   2
3   3
4   4

3.可重复读

当事物隔离级别设置为可重复读时,在此事物期间,只可以读取到事物开始前的最终状态,外部事物发生更新一律不被识别.但外部事物发生插入时,会被读取到,即为幻读.

mysql已经通过并发控制,解决了幻读的问题.

可重复读是mysql默认的隔离级别.

  • 事物A
set tx_isolation=‘repeatable-read‘;
start TRANSACTION;
  • 事物B
start TRANSACTION;
update tx set num=40 where id=1;
commit;
  • 事物A
select * from tx;

结果:

1   30
2   2
3   3
4   4

4.串行化

当隔离级别设置为串行化时,在此事物期间,外部事物不能进行插入或更新操作.从而避免了幻读的问题.

  • 事物A
set tx_isolation=‘serializable‘;
start TRANSACTION;
select * from tx;
  • 事物B
start TRANSACTION;
insert tx values(‘5‘,‘5‘);

结果:

[Err] 1205 - Lock wait timeout exceeded; try restarting transaction


数据库(1)-事物的隔离级别

原文地址:https://www.cnblogs.com/guan-li/p/9878775.html

时间: 2024-10-10 03:29:20

数据库(1)-事物的隔离级别的相关文章

Mysql中事物及隔离级别

什么叫事务 事务就是一组sql组成的操作单元,要么操作全部成功,要么全部失败. ACID属性 原子性(atomicity) 一个事物必须被视为一个不可分割的最小工作单元,整个事务要么全部成功,要么全部失败回滚,对一个事物来说,不可能只执行其中的一部分操作. 一致性(consistency) 数据库总是从一个一致的状态转换到另外一个一致的状态.比如总共两个update,在第一个update后,系统崩溃了,也不会对数据有影响,因为事务没提交. 隔离性(isolation) 一个事务所做的修改在最终提

MySQL数据库引擎、事务隔离级别、锁

MySQL数据库引擎.事务隔离级别.锁 数据库引擎InnoDB和MyISAM有什么区别 大体区别为: MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持.MyISAM类型的表强调的是性能,其执行效率比InnoDB类型更快,但是不支持事务,而InnoDB提供事务支持以及外键等高级数据库功能. 具体实现的区别: InnoDB不支持FULLTEXT类型的索引 InnoDB中不保存表的具体行数,也就是说,执行查询SQL时,InnoDB要扫描一遍整个表来计算有多少行,而MyISAM只要简单的

数据库事务中的隔离级别和锁+spring Transactional注解

数据库事务中的隔离级别和锁 数据库事务在后端开发中占非常重要的地位,如何确保数据读取的正确性.安全性也是我们需要研究的问题. ACID 首先总结一下数据库事务正确执行的四个要素(ACID): 原子性(Atomicity):即事务是不可分割的最小工作单元,事务内的操作要么全做,要么全不做,不能只做一部分:一致性(Consistency):在事务执行前数据库的数据处于正确的状态,而事务执行完成后数据库的数据还是处于正确的状态,即数据完整性约束没有被破坏:比如我们做银行转账的相关业务,A转账给B,要求

数据库事务、事务隔离级别以及锁机制详解

以下主要以MySQL(InnoDB引擎)数据库为讨论背景,纯属个人学习总结,不对的地方还请指出! 什么是事务? 事务是作为一个逻辑单元执行的一系列操作,要么一起成功,要么一起失败.一个逻辑工作单元必须有四个属性,称为 ACID(原子性.致性.隔离性和持久性)属性,只有这样才能成为一个事务. 数据库事物的四大特性(ACID): 1)原子性:(Atomicity) 务必须是原子工作单元:对于其数据修改,要么全都执行,要么全都不执行. 2)一致性:(Consistency) 事务在完成时,必须使所有的

spring中事物的隔离级别

一.Propagation (事务的传播属性) Propagation : key属性确定代理应该给哪个方法增加事务行为.这样的属性最重要的部份是传播行为.有以下选项可供使用:PROPAGATION_REQUIRED--支持当前事务,如果当前没有事务,就新建一个事务.这是最常见的选择.PROPAGATION_SUPPORTS--支持当前事务,如果当前没有事务,就以非事务方式执行.PROPAGATION_MANDATORY--支持当前事务,如果当前没有事务,就抛出异常.PROPAGATION_RE

事物的隔离级别和传播属性

1.ACID:原子性.一致性.隔离性.持久性 2.事务:显示,隐士事物 3.不一致性: 更新丢失(覆盖了).脏读(读取到了未提交的数据).不可重复读(两次读取的结果不一致) 4. 四个隔离级别:--主要保证查询时最新的 READ UNCOMMITTED --不申请X锁与S锁 READ COMMITTED     --申请S锁 REPEATABLE READ    --锁定查询结果,这样其他事务不可以更新查询到的结果数据 SERIALIZABLE           --数据集上放置一个范围锁 七

数据库的四种隔离级别和事务的四特性

数据库事务的四大特性: 事务(Transaction)是并发控制的基本单位.所谓事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位.例如,银行转帐工作:从一个帐号扣款并使另一个帐号增款,这两个操作要么都执行,要么都不执行. 1.数据库事务必须具备ACID特性,ACID是Atomic(原子性).Consistency(一致性).Isolation(隔离性)和Durability(持久性)的英文缩写. 1)原子性(Atomicity) 一个事务(transactio

数据库的特性与隔离级别和spring事务的传播机制和隔离级别

首先数据库的特性就是 ACID: Atomicity 原子性:所有事务是一个整体,要么全部成功,要么失败 Consistency 一致性:在事务开始和结束前,要保持一致性状态 Isolation 隔离性: 对于同一个表的操作,每个事务都是单独的,不会影响其他事务. Durability 持久性: 事务一旦提交,数据库中的数据就是永久的了. 对于以上四种特性中的隔离性,不同的策略会有不同的弊端:脏读,不可重复读,幻读. 脏读: 就是一个事务读取了别的事务执行过程中未提交的数据. 不可重复读: 就是

数据库理论基础 标准的隔离级别

礼悟:    好好学习多思考,尊师重道存感恩.叶见寻根三二一,江河湖海同一体.          虚怀若谷良心主,愿行无悔给最苦.读书锻炼强身心,诚劝且行且珍惜. (图片截取自 传智播客的jdbc的视频教程) 针对于实际与理论的差别进行文字补充. 一些数据库的事物隔离等级是不全,人家没有的等级,即使设置了也不起作用.还有的是:隔离级别所对应的功能 有强有弱. 总的来说,要有师承,学习阅读官方的手册,最后就是具体数据库具体分析.