事务
1、是什么是事务?
	事务就是一个完整的业务逻辑。
举例:
	假如张三向李四转账100元。
	1)张三账户扣100元
	2)李四的账户加100元
以上操作就是一个最小工作单元,要么同时成功要么同时失败,不可拆分。

2、事务支持
只有 INSERT DELETE UPDATE 以上三种语句和事务有关系。

3、事务是如何实现同时成功或同时失败?
	InnoDB存储引擎;提供一组用来记录事务性活动日志文件。
	提交事务:
		清空事务性活动日志文件,并彻底把数据持久化到表中。
	回滚事务:
		按文件进行回滚操作,并清空事务性活动日志文件。
4、如何提交事务,回滚事务?
提交事务:
	COMMIT 语句
回滚事务:
	ROLLBACK 语句
关闭默认提交
	START TRANSACTION

5、事务包括4个特性
A:原子性
	说明事务是最小工作单元,不可再分。
C:一致性
	所有任务要求,在同一事务当中,所有操作必须同时成功,同时失败。
I:隔离性
	A事务和B事务之间有一定的隔离。
D:持久性
	事务结束的一个保障。

6、重点研究事务的隔离性
A和B事务之间有一道墙,墙可以很厚也可以很薄,墙越厚代表隔离级别越高。

查询当前事务隔离级别
	SELECT @@tx_isolation
设置全局事务隔离级别
	SET GLOBAL TRANSACTION ISOLATION LEVEL + 事务隔离级别

事务的隔离级别:
1.读未提交:read uncommitted。(最低隔离级别)
	什么叫读未提交:
		事务A可以读取到事务B未提交的数据。
	问题:
		脏读现象
	演示:
		/*设置全局事务隔离级别*/
		SET GLOBAL TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
		/*查询事务*/
		SELECT @@tx_isolation;
		/*开启事务*/
		START TRANSACTION;
		/*插入数据*/
		INSERT INTO `user`(`u_name`,`u_sex`,`u_money`) 
		VALUE('zhangsan','1',100);
		/*回滚事务*/
		ROLLBACK;
		/*提交事务*/
		COMMIT;
2.读已提交 READ COMMITTED (只能读到提交之后的数据)
	解决的问题:
		解决了脏读现象
	存在的问题:
		第一次查询数据是三条,第二次查询数据可能是四条。
		不能重复读。
	每一次读取的数据都是绝对真实的数据。
	oracle数据库的默认隔离级别READ COMMITTED
	
3.可重复读 REPEATABLE READ 
	什么是可重复读?
		提交之后也读不到,永远读取的都是开启事务之前的数据。
	mysql的默认事务级别 REPEATABLE READ 
	
	事务A开启之后,不管多久,每一次在数据A中读取的数据都是一致的。
	即使事务B已经将数据修改,事务A读到的数据还是没有改变,这就叫
	可重复读。
	
	问题:
		出现幻影
		读取到的数据都是幻象,不够真实。
4.序列化/串行化:serializable
	这种是最高隔离级别,效率低,但是解决了所有问题。
	这种隔离级别表示,事务排队,不能并发。
	优点:
		每一次读取到的都真实数据。
	缺点:
		效率太低。
		

 

最后修改于 2021-09-22 11:50:08
如果觉得我的文章对你有用,请随意赞赏
扫一扫支付
上一篇