事务(
Transaction
)是由一系列对系统中数据进⾏访问与更新的操作所组成的⼀个程序执行逻辑单元。
本文将从七个部分来解析事务。
(1)事务的语法
(2)事物的特性
(3)事务并发问题
(4)事务隔离级别
(5)不同隔离级别锁的情况
(6)隐式提交
(7)JDBC中事务
![](https://img-blog.csdnimg.cn/20210426135819703.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3E5NzgwOTAzNjU=,size_16,color_FFFFFF,t_70)
1.事务的语法
事务的语法结构只包含三部分:开始、提交和回滚。
语法分别为:
//开始
start transaction;
//或者也可以直接使用
begin;
//这里进行事务的书写
//提交。确认当前的修改
commit;
//回滚。放弃当前的修改
rollback;
2.事务的特性
事务一共具有四种特性,我们称之为ACID。
- 原子性Atomicity
- 一致性Consistency
- 隔离性Isolation
- 持久性Duration
2.1原子性Atomicity
事务的原⼦性是指事务必须是⼀个原子的操作序列单元。也就是说,事务的各项操作在一次执行过程中只能出现同一个结果,或者全部成功,或者全部失败。
事务执行过程中出错,会回滚到事务开始前的状态,不可能停滞在中间环节。即事务是一个不可分割的整体。
2.2一致性Consistency
事务的一致性是指事务的执行不能破坏数据库数据的完整性和一致性,一个事务在执行前后都必须保证数据库的一致性,
比如:如果我们从A账户向B账户转钱,不能得到A账户少了钱而B账户没有加钱的结果。
2.3隔离性Isolation
事务的隔离性是在并发环境中,并发的事务之间是相互隔离的。也就是说,不同的事务并发操作相同的数据时,每个事务都有各自完整的数据空间。
一个事务内部的操作及数据的使用对其他并发事务是隔离的,并发执行的各个事务是不能互相干扰的。但是其中区分隔离等级,具体情况会在下文介绍。
2.4持久性Duration
事务的永久性是指事务一旦提交之后,数据库中的数据就会被永久保存下来。
3.事务的并发问题
事务的并发中会产生三个问题:脏读、不可重复读以及幻读。
3.1脏读
脏读:在A事务的执