事务
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
如果觉得我的文章对你有用,请随意赞赏
扫一扫支付

