mysql事务自动提交、高并发问题、隔离级别相关

本文介绍MySQL事务的概念及特性,包括原子性、一致性、隔离性和持久性。探讨了事务的开始、提交和回滚操作,并讨论了自动提交设置。此外,还详细解释了高并发环境下事务的隔离级别及其对解决脏读、不可重复读和幻读等问题的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简单了解mysql 事务

事务:指包含有多个数据库操作指令,这些指令要么都执行要么都撤销;适合多人同时操作一个数据的工况:如银行,机票,保险,证券;
	  满足事务的四个特性:原子性(所有操作命令是作为一个原子形成整体性都成功或者都失败);
						  一致性(数据库总量的完整性,即总量不变,理解成能量守恒有失有得,但平衡);
						  隔离性(事务之间互不影响);
						  持久性(提交后,影响永久性,);
事务开始和结束:
	开始:begin/start transaction; 默认情况下,每个sql语句就是一个事务并主动提交
	提交commit;一旦执行了该命令,将不能回滚事务
	回滚/撤销:rollback;
	注:不提交,在begin下的所有指令不会立马写入到数据库,这个过程中其他窗口查看到的是还是之前的数据;
		事务操作非常耗费资源:
							1、查询时尽量不用事务;
							2、不要出现等待用户输入的情况:占据大量资源;
							3、事务要尽可能的简短;

mysql事务自动提交设置
查看自动提交状态:
show variables like “autocommit”;
显示结果一般为on/off;mysql默认为on
重设自动提交状态:
set autocommit = 1/on(开) 或 /0/off(关);

msyql中每一个sql语句的执行本质上就是一个个单独的事务,默认上他是会自动执行完提交的;所谓事务的自动提交 在同一个客户端窗口下是更改了数据也只是在该客户端窗口修改了,但可以rollback; 只要你不提交 在另一个客户端窗口中查看到的底层数据是不会变得;

高并发下的事务的隔离级别

高并发下的问题:

		1、脏读/写:	针对未提交事务;B事务去查询或更新事务A更新但还没提交的数据,之后A事务回滚了,导致B事务错读或者错写;
		2、不可重复读:	针对update;A事务查询一行数值,A C D事务都在不同时间进行该行数值的修改,那么A事务提交的时间点如果分别在ACD之后,那么它就会获取到不同的数值;
		3、幻读:		针对插入和删除;B事务多次执行查询事务,在每次B事务执行的过程中,出现了A C D事务的插入操作,那么B事务获取的结果数目有可能就不同;
						第一次B事务可能查到5条数据,第二次B事务可能查询到10条数据,似乎出现了幻影;

隔离机制:

		高并发下问题的解决方案;		
										    脏读			不可重复读			幻读								描述
			读未提交(Read uncommitted))	问题存在			问题存在				问题存在							允许一个事务可以读取另一个未提交事务的数据
			读已提交(Read committed)		×				问题存在				问题存在							一个事务修改的数据必须提交后才能被其他事务读取到
			可重复读(Repeatable red)		×				×					问题存在							在事务结束前,都可以反复读取到事务刚开始时看到的数据
			串行化(Serializable)			×				×					×								最高的事务隔离级别,在该级别下,事务串行化顺序执行
		注:×号代表解决了上述问题
				oracle支持两种隔离级别read  committed  和serializable
				mysql四种都支持;默认隔离级别:可重复读。
		
		查看全局和当前隔离级别:		select @@global.tx_isolation,@@tx_isolation;(系统全局的隔离级别);
		修改当前mysql连接隔离级别:	set session transaction isolation level serializable;
		修改全局的隔离级别:          set global transaction isolation level serializable;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值