-
事务定义:
一个业务包含多个操作,多个操作要么全部成功,要么全部不成功。 -
事务特性:ACID
- 原子性(Atomicity):组成事务处理的语句形成了一个逻辑单元,要么全都执行,要么全都不执行 。
- 一致性(Consistency):事务在完成时,必须使所有的数据都保持一致状态 。
- 隔离性(Isolcation):由并发事务所作的修改必须与任何其它并发事务所作的修改隔离
- 持续性(Durability):事务完成之后,它对于系统的影响是永久性的。该修改即使出现致命的系统故障也将一直保持 。
-
事务的隔离性,产生相应的隔离问题
- 脏读:一个事务读到了另一个事务,没有提交的数据。
- 不可重复读:一个事务读到了另一个事务,已经提交的数据(数据的更新update)。
- 幻读(虚读):一个事务读到了另一个事务,已经提交的数据(数据的录入insert)。
-
数据库的隔离级别
-
为了解决隔离性产生的问题
-
分类
- 读未提交(read uncommitted) , 所有问题
- 读已提交(read committed) , 解决了脏读,没有解决其他问题。
- 可重复读(repeatable read) , 解决了脏读 和 “不可重复读” , 没有解决幻读 (mysql直接不可重复读,将“幻读”解决)
- 串行化(serializable) , 同步synchronized,相当于单线程,单事务,没有并发问题。 -
-
对比
- 性能:read uncommitted > read committed > repeatable read > serializable
- 安全:read uncommitted < read committed < repeatable read < serializable
-
mysql默认隔离级别:repeatable read
- mysql事务操作sql语句
-
开启事务 :mysql > start transaction;
-
提交事务 :mysql > commit;
-
回滚事务 :mysql > rollback;
-
查询数据库当前隔离界别:mysql > select @@tx_isolation;
-
修改数据库当前隔离界别:mysql > set session transaction isolation level (read uncommitted | read committed | repeatable read | serializable)
-