事务以及MySQL事务隔离级别+MySQL引擎的区别

  • 1、事务的基本要素:ACID

    • 1、原子性(Atomicity):

      • 事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节。事务执行过程中出错,会回滚到事务开始前的状态,所有的操作就像没有发生一样。也就是说事务是一个不可分割的整体,就像化学中学过的原子,是物质构成的基本单位。
    • 2、一致性(Consistency):
      • 事务开始前和结束后,数据库的完整性约束没有被破坏 。比如 A 向 B 转账,不可能 A 扣了钱,B 却没收到。
    • 3、隔离性(Isolation):
      • 同一时间,只允许一个事务请求同一数据,不同的事务之间彼此没有任何干扰。比如 A 正在从一张银行卡中取钱,在 A 取钱的过程结束前,B 不能向这张卡转账。
    • 4、持久性(Durability):
      • 事务完成后,事务对数据库的所有更新将被保存到数据库,不能回滚。
  • 2、事务的并发问题
    • 脏读:

      • 事务 T1 修改了 1 行数据,事务 T2 在事务 T1 提交之前读到了该行数据
        注:即事务1修改数据,但未提交事务,事务2可以看到。
    • 不可重复读:
      • 事务 T1 读取了一行数据,事务 T2 接着修改或者删除了该行数据,当 T1 再次读取同一行数据的时候,读到的数据是修改之后的或者发现已经被删除
        注:即事务1可以读到事务2修改前和修改提交后的数据。但事务2修改或删除了数据。
    • 幻读:
      • 事务 T1 读取了满足某条件的一个数据集,事务 T2 插入了一行或者多行数据满足了 T1 的选择条件,导致事务 T1 再次使用同样的选择条件读取的时候,得到了比第一次读取更多的数据集。
        注:即事务1可以读到事务2修改前和修改提交后的数据。但事务2新增了数据。
    • 区别:以解决方式为区分。
      • 脏读:事务A读取到另一事务B提交之前的数据
        注:- 单次读取,读取到错误数据。
      • 不可重复读:事务A多次读取同一数据,事务 B 在事务 A 多次读取的过程中,对数据作了更新或者删除,导致事务 A 多次读取同一数据时,结果 不一致。(锁行解决)
        注:- 多次读取数据不同,侧重于对某一行的操作
      • 幻读:事务A读取某一条件的数据,事务B插入了一行或多行。事务A前后读取不一致。(锁表解决)
        注:- 多次读取数据不同,侧重于对整张表的操作
  • 3、MYSQL 事务的隔离级别
    • 图示:

    • 事务说明:
      • 读未提交(read-uncommitted)【会脏读】【会不可重复读】【会幻读】
        注:即事务1修改数据,但未提交事务,事务2可以看到。
      • 不可重复读(也叫读已提交)(read-committed)【会不可重复读】【会幻读】( oracle 默认)
        注:即事务1修改数据,但未提交事务,事务2不可以看到。然后引发另一个问题,事务1在事务2开始前和结束后读取到的数据不一致(修改和删除导致)。
      • 可重复读(repeatable-read)【会幻读】(mysql 默认)
        注:事务1在事务2开始前和结束后读取到的数据不一致(新增导致)。
      • 串行化(serializable)【都不会】
    • 事务锁说明:
      • 1、事务隔离级别为读提交时,写数据只会锁住相应的行。
      • 2、事务隔离级别为可重复读时:
        • 如果检索条件有索引(包括主键索引)的时候,默认加锁方式是 next-key 锁;
        • 如果检索条件没有索引,更新数据时会锁住整张表。一个间隙被事务加了锁,其他事务是不能在这个间隙插入记录的,这样可以防止幻读。
      • 3、事务隔离级别为串行化时,读写数据都会锁住整张表
      • 4、隔离级别越高,越能保证数据的完整性和一致性,但是对并发性能的影响也越大。
  • 4、Innodb 和 MyISAM 引擎之间的区别,以及应用场景
    • 区别

      • 1、MyISAM 是非事务安全的,而 InnoDB 是事务安全的
      • 2、MyISAM 锁的粒度是表级的,而 InnoDB 支持行级锁
      • 3、MyISAM 支持全文类型索引,而 InnoDB 不支持全文索引
      • 4、MyISAM 相对简单,效率上要优于 InnoDB,小型应用可以考虑使用 MyISAM
      • 5、MyISAM 表保存成文件形式,跨平台使用更加方便
    • 应用场景:
      • 1、MyISAM 管理非事务表,提供高速存储和检索以及全文搜索能力,如果再应用中执行大量 select 操作,应该选择 MyISAM
      • 2、InnoDB 用于事务处理,具有 ACID 事务支持等特性,如果在应用中执行大量 insert 和 update 操作,应该选择 InnoDB
  • 5、参考:

原文地址:https://www.cnblogs.com/buwuliao/p/10674768.html

时间: 2024-10-04 14:02:16

事务以及MySQL事务隔离级别+MySQL引擎的区别的相关文章

DML 事务 隔离级别 存储引擎对比

DML 事务 隔离级别 存储引擎对比 DML insert into 第一种: insert into tb_name [(col1,col2,....)]{values|value}(val1,val2,...)[,(val21,val22,....),....] 第二种: insert into tb_name set col_name=val1,col2=val2,.... 第三种(将一个表中的数据插入到另外一张表中): insert into tb_name select clause

Mysql得隔离级别

一.首先什么是事务? 事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消.也就是事务具有原子性,一个事务中的一系列的操作要么全部成功,要么一个都不做. 事务的结束有两种,当事务中的所以步骤全部成功执行时,事务提交.如果其中一个步骤失败,将发生回滚操作,撤消撤消之前到事务开始时的所以操作. 二.事务的 ACID 事务具有四个特征:原子性( Atomicity ).一致性( Consistency ).隔离性( Isolation )和持续性( Dura

Mysql的隔离级别

一.首先什么是事务? 事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消.也就是事务具有原子性,一个事务中的一系列的操作要么全部成功,要么一个都不做. 事务的结束有两种,当事务中的所以步骤全部成功执行时,事务提交.如果其中一个步骤失败,将发生回滚操作,撤消撤消之前到事务开始时的所以操作. 二.事务的 ACID 事务具有四个特征:原子性( Atomicity ).一致性( Consistency ).隔离性( Isolation )和持续性( Dura

MySql的隔离级别和锁的关系

一.事务的4个基本特征 Atomic(原子性): 事务中包含的操作被看做一个逻辑单元,这个逻辑单元中的操作要 么全部成功,要么全部失败. Consistency(一致性): 只有合法的数据可以被写入数据库,否则事务应该将其回滚到最初 状态. Isolation(隔离性): 事务允许多个用户对同一个数据进行并发访问,而不破坏数据的正 确性和完整性.同时,并行事务的修改必须与其他并行事务的修改 相互独立. Durability(持久性): 事务结束后,事务处理的结果必须能够得到固化. 二.数据库隔离

Java Web(八) 事务,安全问题及隔离级别

事务 什么是事务? 事务就是一组原子性的SQL查询,或者说是一个独立的工作单元. 事务的作用 事务在我们平常的CRUD(增删改查)操作当中也许不太常用, 但是如果我们有一种需求,一组操作中必须全部成功执行,才算完成任务,只要有一个出错了,那么所有的任务都将回到最初的状况,恢复原样.那么这就需要使用事务了.如: 银行转账,购买飞机票... 事务的特性 事务具有4个特性(ACID):原子性(Atomicity).一致性(Consistency).隔离性(lsolation).持久性(Durabili

事务的特性与隔离级别

事务的定义: 简单的说事务就是一组原子性的SQL语句.我们可以将这组语句理解为一个工作单元,要 么全都执行,要不都不执行. 事物的四大特性(简称ACID): 原子性(Atomicity):事务中的全部操作在数据库中是不可分割的,要么全部提交成功,要么全部失败回滚. 一致性(Consistency):几个并行执行的事务,其执行结果必须与按某一顺序串行执行的结果相一致. 隔离性(Isolation):事务的执行不受其他事务的干扰,事务执行的中间结果对其他事务必须是透明的.一个事务所做的修改在提交之前

mysql InnoDB 和 Myisam 存储引擎的区别

1. InnoDB 支持事物,Myisam 不支持事物 2. InnoDB 是行级锁,Myisam 表级锁 3. InnoDB 不支持全文索引,Myisam 支持全文索引,但不支持外键 4. InnoDB 在磁盘上是两个文件,Myisam 是三个文件 5 myISAM管理非事务表.它提供高速存储和检索,以及全文搜索能力.如果应用中需要执行大量的SELECT查询,那么MyISAM是更好的选择 6InnoDB用于事务处理应用程序,具有众多特性,包括ACID事务支持.如果应用中需要执行大量的INSER

mysql 事务的四种隔离级别

MYSQL标准定义了4种隔离级别,用来限定事务内外的哪些改变是可见的,哪些是不可见的. 低的隔离级一般支持更高的并发处理,并拥有更低的系统开销. 隔离级别由低到高:Read Uncommitted < Read Committed < Repeatable Read < Serializable. 第一:READ UNCOMMITTED (读取未提交内容) 在该隔离级别,所有事务都可以看到其他未提交(commit)事务的执行结果. 本隔离级别很少用于实际应用,因为它的性能也不比其他级别好

SQL事务的四种隔离级别和MySQL多版本并发控制

SQL标准定义了4类隔离级别,包括了一些具体规则,用来限定事务内外的那些改变时可见的,那些是不可见的.低级别的隔离级一般支持更高的并发处理,并拥有更低的系统开销. ReadUncommitted(读取未提交内容) 在该隔离级别,所有事务都可以看到其他未提交事务的执行结构.本隔离级别很少用于实际应用,因为它的性能也不比其他级别好多少.读取未提交的数据,也被称之为脏读(Dirty Read) ReadCommitted(读取提交内容) 这是大多数数据库系统的默认隔离级别(但不是MySQL默认的).它