事物(transation)
基本概述
- 一个事物其实就是一个完整的业务逻辑,是最小的工作单元,不可再分。
- 只有DML语句才会有事物,其他语句与事物无关。
- 本质上,事物就是多条DML语句同时成功,或同时失败。
SQL分类
- DQL(Data Query Language):数据查询语言,关键字:select。
- DML(Data Manipulation Language):数据操纵语言,关键字:insert,delete,update。
- DDL(Data Definition Language):数据库定义语言,关键字:creat,drop,alter。
- DCL(Data Control Language):数据库控制语言,关键字:grant,revoke。
- TCL(Transation Control Language):事物控制语言,关键字:commit,rollback。
事物的提交与回滚
- 事物提交:清空事物性活动日志文件,将数据全部彻底持久化到数据库中;提交事物标志着事物的结束,并且是一种全部成功的结束。
- 事物回滚:将之前所有的DML操作全部撤销,并且清空事物性活动日志文件;事物回滚标志着事物的结束,并且是一种全部失败的结束。
事物的四个特性
A (Atomicity):原子性,事物是最小的工作单元,不可再分。
C (Consistency):一致性,在同一个事物中,所有的操作必须同时成功,或同时失败,以保证数据的一直性。
I (Isolation):隔离性,两个不同的事物操作是,具有一定隔离性。
D (Durability):持久性,事物的最终结果,事物提交就是将没有保存到硬盘上的数据保存到硬盘上。
事物隔离性的4个级别及存在的问题
-
读未提交:read uncommitted,最低的隔离级别,没有提交就被读到。
事物A可以读到事物B的没有提交的数据;
存在问题:脏读现象(当开始事物A后,B事物同时操作一个数据,B事物对数据的操作还没提交就可以被A事物读到,若事物B回滚,则A事物读到的数据就是脏数据)。 -
读已提交:read committed,提交之后才能读到。
事物A只能读取到事物B提交后的数据;
存在问题:不可重复读,(当开启事物A后,B事物同时操作一个数据,在事物B提交后,A事物会读取到不同的数据)。
解决问题:解决了脏读现象。 -
可重复读:repeatable read,提交时候也读取不到,读到的永远是开启事物时的数据。
事物A开启后,当事物B同时操作同一个数据时,即使对数据进行了修改并且提交,事物A读取不到事物B提交后的数据。
存在问题:幻读现象。(读取到的不是真实数据)
解决问题:解决了脏读现象。 -
序列化、串行化:serializable(最高的隔离级别)
这是最高隔离级别,效率最低。解决了所有的问题。
这种隔离级别表示事务排队,不能并发,每一次读取到的数据都是最真实的。