当前位置: 首页 > news >正文

mysql之事务

(一)事务

1、事务是一种机制一个操作序列,包含了一组数据库的操作命令,所有命令都是一个整体,向系统提交或者撤销的操作,要么都执行,要么都不执行

2、不可分割的单位

(二)事务的特点(ACID)

总结:在事务管理中,原子性是基础,隔离性是手段,一致性是目的,持久性是最终的结果

1、原子性(A):最小单位,事务里的所有条件都是一个整体,不可分割,要么都成功,要么都失败

2、一致性(C):事务开始之前和事务结束之后,数据库的完整性约束没有被破坏。

(1)事务完成时,数据必须处于一致状态。
(2)事务开始之前,数据库中的存储数据处于一致状态
(3)进行中的事务,数据可能处于不一致的状态
(4)在事务最终完成时,必须再次回到已知的已知状态
脏读——解决:commit

3、隔离性(I):指在并发环境中,当不同事务同时操纵相同的数据时,每个事务都有各自完整的数据空间,对数据进行修改的所有并发事务是彼此隔离的,表明事务必须是独立的

(1)修改数据的事务可以在另一个使用相同数据的事务开始之前访问这些数据,或者在另一个使用相同的事务结束之后访问这些数据

4、持久性(D):数据一旦提交,事务的效果将会被永久的保留在数据库中,而且不会被回滚。

(三)mysql支持四种隔离级别

1、未提交读(脏读):允许脏读,允许一个事务可以看到其他事务未提交的修改

2、提交读:事务只能查看已经提交的修改,未提交的修改是不可见的,可以防止脏读(orcale、sql-server)

3、可重复读:mysql的默认隔离级别,确保如果在一个事务中执行两次相同的select语句时,都能得到相同的结果,不管其他事务是否提交修改,可以防止脏读以及不可重复读。

4、串行读,锁表,完全串行化,每一个事务都隔离,读写都会阻塞,会降低数据库的效率

(四)事务隔离级别的作用范围

1、全局级:对所有的会话有效

2、会话级:只对当前的会话有效

设置事务的隔离级别

1、全局级:

(1)设置全局事务的隔离级别:
set global transaction isolation level read uncommitted;
(2)临时设置全局事务的隔离级别(重启即失效):
set @@global.tx_isolation='read uncommitted';

2、会话级:

(1)设置会话事务的隔离级别:
set session transaction isolation level read uncommitted;
(2)临时设置会话事务的隔离级别(重启即失效):
set @@session.tx_isolation='read uncommitted';
flush privileges;

(六)脏读

1、脏读:另外一个事务能够看到另一个事务未提交的修改结果

2、exit退出即可解决

(七)不可重复读(两次出现的数据不一致)

1、不可重复读:一个事物内,多次读同一数据。前一个事务还没有结束,另一个事务也访问该数据,在一个事务之内,两次查询到的结果不一致(读不到相同的数据内容)

2、修改全局级的隔离级别

3、实验

4、提交(commit)

(八)幻读(测试环境中会遇到)

1、幻读:一个事务对一个表中的数据进行了修改,可能会涉及到表中的全部数据。另一个事务也修改了表中的数据,插入了一行新的数据,前一个事务会发现表中还有数据没有修改,类似于幻觉

2、实验

3、解决(以最终提交数据为准)

(九)丢失更新(测试环境中会遇到)

1、丢失更新:两个事务同时修改一条记录,A先修改记录,B也修改了记录,B一旦提交会覆盖A的结果

2、实验

(1)同时开始数据
(2)修改数据

避免上述(幻读、丢失更新等)情况(重点)

1、权限控制(最小权限设置)

2、根据情况来使用隔离级别

(1)生产环境最好是提交读、可重复读
(2)测试环境无所谓

3、生产环境上,只能允许一个人对一个事务进行操作,其他人不允许操作

(十一)事务的控制语句

1、显示的开启事务:begin、start transaction

2、提交事务:commit、commit work

3、回滚(撤销正在进行的所有未提交的修改):rollback、rollback work

(1)创建回滚点(一个事务可以有多个回滚点):savepoint s1(名称自定义)
(2)回滚到还原点:rollback to s1

4、多点还原:S1、S2

(1)如果还原到S1,S2将消失
(2)如果提交、确认,所有还原点全部消失

4、mysql:默认自动提交到数据库中保存(提交事务默认是自动提交)

(1)使用set来设置mysql的提交方式

(2)show variables like autocommit(查看级别)

(3)set autocommit=0;(关闭自动提交)

http://www.lryc.cn/news/216314.html

相关文章:

  • 组件化npm包打包和使用
  • Windows 内置Linux子系统的配置(From WSL1 to WSL2)
  • 2023-11-03 android app TextView 滚动,ScrollView 之外的另外一种方法
  • SAP 获取GOS附件清单及URL数据方法
  • VUE批量下载图片打包成zip下载
  • 微信小程序-form表单-获取用户输入文本框的值
  • Docker(1)
  • axios 实现请求重试
  • SSE加速随笔
  • 【TES720D】青翼科技基于复旦微的FMQL20S400全国产化ARM核心模
  • arcgis删除细长图斑的方法
  • Flutter笔记:Flutter的WidgetsBinding.instance的window属性
  • element UI DatePicker 日期选择器 点击时间点可选限制范围前后十五天
  • 【自用】vmware workstation建立主机window与虚拟机ubuntu之间的共享文件夹
  • 【2023年MathorCup高校数学建模挑战赛-大数据竞赛】赛道A:基于计算机视觉的坑洼道路检测和识别 python 代码解析
  • Mozilla Firefox 119 现已可供下载
  • What is 哈希?
  • 在Photoshop中如何校正倾斜的图片
  • Maven第六章:Maven的自定义插件开发
  • springboot 注入配置文件中的集合 List
  • springboot整合redis+lua实现getdel操作保证原子性
  • win10系统nodejs的安装npm教程
  • C语言assert函数:什么是“assert”函数
  • R语言绘图-5-条形图(修改坐标轴以及图例等)
  • uniapp自定义权限菜单,动态tabbar
  • ubuntu20.04配置解压版mysql5.7
  • 【js】vue获取document.getElementById(a)为null
  • 系列六、Mybatis的一级缓存
  • 用中文编程工具给澳大利亚客户定制开发的英文版服装进销存软件应用实例
  • geoserver 的跨域问题怎么解决