首页 / 知识
Spring事务和MySQL事务详解面试
2023-04-11 13:09:00

数据库事务
事务是什么
是数据库操作的最小工作单元,是作为单个逻辑工作单元执行的一系列操作;这些操作作为一个整体一起向系统提交,要么都执行、要么都不执行;事务是一组不可再分割的操作集合。
事务的四大特性
原子性
事务是数据库的逻辑工作单位,事务中包含的各操作要么都做,要么都不做
一致性
事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。
隔离性
一个事务的执行不能被其它事务干扰。即一个事务内部的操作及使用的数据对其它并发事务是隔离的,并发执行的各个事务之间不能互相干扰。
持续性
也称永久性,指一个事务一旦提交,它对数据库中的数据的改变就是永久性的。接下来的其它操作或故障不应该对其执行结果有任何影响。
MySQL事务隔离级别
隔离级别 隔离级别的值 导致的问题
Read-Uncommitted 0 导致脏读
Read-Committed 1 避免脏读,允许不可重复读和幻读
Repeatable-Read 2 MySQL默认的隔离级别。避免脏读,不可重复读,允许幻读
Serializable 3 串行化读,事务只能一个一个执行,避免了 脏读、不可重复读、幻读。执行效率慢,使用时慎重
1. 脏读
一个事务对数据进行了增删改查,但是未提交事务。另一个事物可以读取到未提交的数据,如果第一个事务进行了回滚,那么第二个事务就读到了脏数据。
例子:
领导给张三发工资,10000元已打到张三账户,但该事务还未提交,正好这时候张三去查询工资,发现10000元已到账。这时领导发现张三工资算多了5000元,于是回滚了事务,修改了金额后将事务提交。最后张三实际到账的只有5000元。
2. 不可重复度
一次事务发生了两次读操作,两个读操作之间发生了另一个事务对数据修改操作,这时候第一次和第二次读到的数据不一致。
不可重复度关注点在数据更新和删除,通过行级锁可以实现可重复读的隔离级别。
例子:
张三需要转正1000元,系统读到卡余额有2000元,此时张三老婆正好需要转正2000元,并且在张三提交事务前把2000元转走了,当张三提交转账是系统提示余额不足。
3. 幻读
幻读,指的是当某个事务在读取某个范围内的记录时,另外一个事务又在该范围内插入了新的记录,当之前的事务再次读取该范围的记录时,会产生幻行。
相对于不可重复读,幻读更关注其它事务的新增数据。通过行级锁可以避免不可重复读,但无法解决幻读的问题,想要解决幻读,只能通过Serializable隔离级别来实现。
例子:
张三老婆准备打印张三这个月的信用卡消费记录,经查询发现消费了两次共1000元,而这时张三刚按摩完准备结账,消费了1000元,这时银行记录新增了一条1000元的消费记录。当张三老婆将消费记录打印出来时,发现总额变为了2000元,这让张三老婆很诧异。
4. 串行化读
Serializable是最高的隔离级别,性能很低,一般很少用。在这级别下,事务是串行顺序执行的,不仅避免了脏读、不可重复读,还避免了幻读。
|
最新内容
相关内容
python如何调用mysql
python如何调用mysql,培训,流程,一致,密码,数据,数据库,数据库连接,接口,语句,方法,DB-API是一个规范.它定义了一系列必须的对象和数据库存取python判断字符是否为字母和数字
python判断字符是否为字母和数字,数字,培训,字母,字符串,字符,空格,方法,都会,分号,大小写,在使用python语言中的字符串方法时,可以使用它们判python调用函数和打印函数的区别
python调用函数和打印函数的区别,培训,函数,区别,变量,实例,分配,以上,参数,东西,更多,python调用函数和打印函数的区别1、当你调用一个返回python缩进和空格的好处
python缩进和空格的好处,代码,培训,统一,空格,好处,可读性,函数,实例,定义,以上,python缩进和空格的好处1、不会像其他编程语言(如Java或c#)pythonin和is的区分
pythonin和is的区分,培训,两个,序列,变量,区别,对象,字符串,实例,以上,教程,python中in和is的区分区别说明1、in:一方面可以用于检查序列(listpython包和文件夹有什么区别
python包和文件夹有什么区别,培训,单位,公共,文件夹,显卡,模块,大小,字节,剩余,实例,python包和文件夹有什么区别1、一个或多个文件夹组成一python如何为函数和模块起别名
python如何为函数和模块起别名,名称,培训,函数,别名,模块,冲突,关键字,以上,两个,程序,python如何为函数和模块起别名1、如果要导入的函数的pythoncopy()和直接赋值的区别
pythoncopy()和直接赋值的区别,培训,赋值,元素,区别,风云,老店,枭雄,副本,乱世,变量,pythoncopy()和直接赋值的区别区别说明1、使用“=”直接python字典和json的比较
python字典和json的比较,数据,位置,培训,概念,字典,对象,格式,前端,缩写,字符串,python字典和json的比较1、概念不同(1)dict是一个完整的数据python语句和缩进的实现
python语句和缩进的实现,代码,培训,概念,语句,数列,冒号,举例来说,赋值,外层,指令,python语句和缩进的实现Python解释程序能够执行的指令就是使用 MS Access 作为 MySQL 数据库
使用 MS Access 作为 MySQL 数据库后端的前端的问题?,使用 MS Access 作为 MySQL 数据库后端的前端的问题?,数据库,用户,文件,编写,Iss关于数据库:将图像存储在数据库中-
关于数据库:将图像存储在数据库中-是或否?,关于数据库:将图像存储在数据库中-是或否?,位置,图像,应用程序,文件系统,Storing Images in D