首页 > 其他分享 >03_事务隔离

03_事务隔离

时间:2023-06-03 09:13:59浏览次数:35  
标签:03 事务 隔离 视图 提交 MySQL 级别

03_事务隔离

事务隔离

事务需要保证一组数据库操作,要么全部成功,要么全部失败;

MySQL事务隔离性是保证数据一致性和并发控制的重要手段之一,它对于多个事务同时访问和修改同一数据的情况下,能够保证事务之间的独立性和隔离性,避免数据的不一致和冲突。

ACID是MySQL事务的四个特性,其中隔离性是指多个并发事务之间相互隔离,互不干扰,每个事务仅能看到自己的修改,而不能看到其他事务的修改。

  • ACID概念最早由IBM的研究员在20世纪80年代提出,主要是为了解决数据库并发控制和数据一致性的问题,并逐渐成为了数据库事务的标准特性。
  • ACID(Atomicity、Consistency、Isolation、Durability,即原子性、一致性、隔离性、持久性)

隔离级别

MySQL中有四种隔离级别,包括读未提交、读提交、可重复读和串行化。

  • 读未提交(read uncommitted
  • 读提交(read committed
  • 可重复读(repeatable read)、
  • 串行化(serializable

其中,读未提交是最低的隔离级别,它允许一个事务读取另一个事务未提交的数据,可能会出现脏读、不可重复读和幻读的问题。

读提交是一个事务提交后才能被其他事务看到,避免了脏读的问题,但可能会出现不可重复读和幻读的问题。

可重复读是MySQL默认的隔离级别,它保证了在一个事务执行期间,读取的数据是一致的,不会出现脏读、不可重复读和幻读的问题。

串行化是最高的隔离级别,它通过加锁的方式保证了事务的串行执行,避免了所有并发问题,但会导致性能问题。

事务隔离的实现

MySQL的事务隔离性是通过多版本并发控制(MVCC)来实现的,它通过为每个事务创建一个独立的视图来保证事务之间的隔离性。

  • 在可重复读隔离级别下,视图是在事务启动时创建的,整个事务存在期间都使用这个视图。
  • 在读提交隔离级别下,视图是在每个SQL语句开始执行时创建的。
  • 而在读未提交隔离级别下直接返回记录上的最新值,没有视图概念。
  • 在串行化隔离级别下,直接用加锁的方式来避免并发访问。

同时,MySQL在实现MVCC时,每条记录在更新时都会同时记录一条回滚操作,同一条记录在系统中可以存在多个版本,回滚日志会在不需要的时候被删除。

最后,需要注意的是,长事务会导致系统里面存在很老的事务视图,这些事务可能会访问数据库里面的任何数据,导致大量占用存储空间,因此建议尽量避免使用长事务。

默认隔离级别

Oracle 数据库的默认隔离级别其实是:读提交;

MySQL 数据库的默认隔离级别是:可重复读。

标签:03,事务,隔离,视图,提交,MySQL,级别
From: https://www.cnblogs.com/LuoQi11/p/03_adivision-isolation-zeqf1e.html

相关文章

  • 2023-06-03 刷题
    练习英文描述算法56.合并区间-力扣(LeetCode)[mid,非常好展示思路]分析:Firstsorttheintervalsbystarttime,sothatwecaneasilyfindwhichintervalscanbemergedbycheckingintervalsfromlefttoright.Useoneexampletodemotheprocess.(e.g.use......
  • 03web安全学习---前端基础
    一、前端是什么?二、HTML最简单的架构三、JS的妙用......
  • 19)事务
    1、事务的必要性:先来看一个例子,如下有一张账户表,字段包括账户号作为主键、账户名字、账户余额三个字段;先向其中插入两行数据;--先创建一个账户表:createtableaccount(account_nointauto_incrementprimarykey,account_namechar(10)notnull,balancein......
  • [AGC038E] Gachapon
    ProblemStatementSnukefoundarandomnumbergenerator.Itgeneratesanintegerbetween$0$and$N-1$(inclusive).Anintegersequence$A_0,A_1,\cdots,A_{N-1}$representstheprobabilitythateachoftheseintegersisgenerated.Theinteger$i$($0......
  • 如何实现抖音 '回到刚刚查看的' 位置
    实现效果,假如当前浏览的是第121条视频 首先需要先准备要用到的工具函数,和模拟接口回调函数api.js//模拟根据当前id返回该id前面有多少条视频exportfunctiongetOffset(id){returnnewPromise(resolve=>{resolve(121)})}//模拟返回一个具......
  • 事务的特性和简介
    1.原子性:要么都成功,要么都失败2.一致性:事务前后的数据完整性要保证一致3.持久性:事务一旦提交则不可逆,被持久到数据库中4.隔离性:多个用户并发访问数据库时,数据库为每一个用户开启事务,不能被其他事务的操作所干扰,事务之间相互隔离事务不隔离会导致的问题:脏读:一个事务读取到另外......
  • ORA-01031: TT15019
     手工编辑sys.odbc.ini尝试修改参数PermSize,重新连接报如下错误Command>connect"dsn=sampledb;uid=hxl;pwd=oracle";cx_Oracle.DatabaseError:ORA-01031:TT15019:OnlytheinstanceadminmayalterthePermSizeattribute解决办法:./ttisql"Driver=/opt/tt18.1.4.34.0......
  • CALL n10s.rdf.import.fetch('~/env/datas/marvel.nt', 'N-Triples')路径应该如何定义
    在Neo4j中使用n10s.rdf.import.fetch()函数导入RDF数据时,路径的定义方式取决于你运行Neo4j数据库的操作系统和文件系统的配置。在给定路径之前,请确保你具有适当的文件系统权限。以下是路径定义的示例:在Windows上:CALLn10s.rdf.import.fetch('file:///C:/Users/YourUsername/e......
  • [linux]undefined reference to `__gxx_personality_v0'
    linux程序 #include#include#includeintcount=0;voidctrl_c_count(int);intmain(void){intc;void(*old_handler)(int);old_handler=signal(SIGINT,ctrl_c_count);while((c=getchar()!=''));printf("Ctrl_Ccount=%d",count);......
  • Oracle:OpenEuler 22.03 安装oracle12c:个人认为这是最完美的解决方案
    最小化安装openeuler-22.03-sp1,并更新到最新(写本文时:2023-06-01)关闭selinux关闭firewalld.service创建用户及用户组:oracle:oinstall创建推荐的目录:/u01,属主oracle:oinstallyuminstalllibnsllibnsl2-devellibaio-devellibcap-develxorg-x11-utilsxauthgccmakelibst......