- 一、事务(transaction)
- 1.什么是事务
- 2.提交事务与回滚事务
- (1)提交事务
- (2)回滚事务
- (3)mysql自动提交机制
- 3.事物的4个特性
- (1)原子性(A)
- (2)一致性(C)
- (3)隔离性(I)
- 读未提交 read uncommitted(最低隔离级别)
- 读已提交 read committed
- 可重复读 repeatable read
- 序列化/串行化 serializable(最高隔离级别)
- 查看事务隔离级别
- 设置事务全局隔离级别
- (4)持久性(D)
2.提交事务与回滚事务 (1)提交事务(1)一个事务其实就是一个完整的业务逻辑,一个最小的工作单元,不可再分。 通俗来说,一个事务就是多条DML语句同时成功或者同时失败。
(2)只有DML(insert delete update)语句和事务有关系,因为以上三个语句是数据库表中数据进行增删改的,只要操作一旦涉及到数据的增删改,那么就必须考虑安全。
(2)回滚事务(1)使用 commit; 语句,提交事务
(2)提交事务:清空实务性活动的日志文件,讲数据全部彻底持久化到数据库表中。提交事务标志着事务的结束,是一种全部成功的结束。
(3)mysql自动提交机制(1)使用 rollback; 语句回滚事务,永远只能回滚到上一次的提交位置。
(2)回滚事务:将之前所有的DML操作全部撤销,清空实务性活动的日志文件。回滚事务标志着事务的结束,是一种全部失败的结束。
3.事物的4个特性 (1)原子性(A)(1)mysql是自动提交的,每执行一条DML语句,则提交一次
(2)关闭自动提交:先执行 start transaction; 语句
(2)一致性(C)说明事务是最小的工作单元,不可再分
(3)隔离性(I)在同一个事务中,所有操作必须同时成功,或者同时失败,以保证数据的一致性
A事务和B事务之间有一定的隔离,
事务之间的隔离级别 :
读未提交 read uncommitted(最低隔离级别)读已提交 read committed(1)概念 : 事务A可以读取到事务B未提交的数据
(2)问题 : 脏读,称为读到了脏数据
(3)一般属于理论上的隔离级别,没有使用
可重复读 repeatable read(1)概念 : 事务A只能读取到事务B提交之后的数据,解决了脏读现象
(2)问题 : 不可重复读取数据,在事务开启之后,第一次读到的数据是3条,但是当前事务还没有结束,可能第二次读的时候读到的数据是4条,3!=4 称为不可重复读。
(3)这种隔离级别每一次读到的数据都是绝对真实的
序列化/串行化 serializable(最高隔离级别)概念 : 事务A开启之后,不管多久,每一次在事务A中读到的数据都是一致的。即使事务B将数据已经修改并且提交了,事务A读取到的数据还是没有发生改变,解决了不可重复读。
问题 : 可能会出现幻影读,每一次读到的 数据都是幻想,不够真实
查看事务隔离级别表示事务排队不能并发,每一次读取到的数据都是最真实的,并且效率最低。
select @@tx_isolation;设置事务全局隔离级别
//后面自己加要改的隔离级别,这里加的 read uncommitted set global transaction isolation level read uncommitted;(4)持久性(D)
事务最终结束的一个保障,事务提交,相当于将没有保存到硬盘上的数据保存到硬盘上