Skip to content

Latest commit

 

History

History
99 lines (59 loc) · 3.08 KB

事务.md

File metadata and controls

99 lines (59 loc) · 3.08 KB

事务

文章已同步至GitHub开源项目: Java超神之路

事务的ACID属性

  1. 原子性(Atomicity)

    事务是一个不可再分的操作要么都发生,要么都不发生。

  2. 一致性(Consistency)

    事务必须使数据库从一个一致性状态转换到另外一个一致性状态。

  3. 隔离性(Isloation)

    事务的隔离性是指一个事务的执行不能被其他事务干扰,即事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。

  4. 持久性(Durability)

    持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,按下来的其他操作和数据库故障不应该对其有任何影响。

事务的创建

隐式事务

事务没有明显的开启和结束标记,默认是开启自动提交的。

显示事务

  1. 首先将自动提交关闭。
set autocommit = 0;
  1. 开启事务(可选)
start transaction;
  1. 编写SQL语句
CRUD....
  1. 结束事务
commit; #提交
rollback; #回滚

事务的隔离级别

如果不采取隔离措施,会导致如下的并发问题:

  1. 脏读(读到了脏数据)

    ​ 某个事务读取了别的事务修改的但未提交的数据。

  2. 不可重复读(重复读值不一样)

    不可重复读:对于两个事务T1,T2,T1读取了一个字段,然后T2更新了该字段之后,T1次读取同一个字段值就不同了

  3. 幻读(重复读取数据条数变化)

    ​ 幻读:对于两个事务T1,T2,T1从一个表中读取了一个字段然后T2在该表中插入了一些新的行.之后,如果T1再次读取同一个表,就会多出几行

隔离级别

MySQL支持四种隔离级别。默认是可重复读。

隔离级别 描述 等级 可能后果
read uncommitted 读未提交 可以读取别的事务未提交的数据 1 脏读,不可重复读,幻读
read committed 读已提交 可以读取别的事务已经提交的数据 2 不可重复读,幻读
repeatable read 可重复读 事务读取别的事务修改且已提交的数据,读到的还是旧数据。 通过加事务的版本号实现 3 幻读
serializable 串行化 一个个事务排成序列的形式。事务一个挨一个执行 4

设置隔离级别

​ 查看当前隔离级别

SELECT @@tx_isolation;

设置当前会话的隔离级别为XXX

SET SESSION TRANSACTION ISOLATION LEVEL XXX ; 

文章已同步至GitHub开源项目: Java超神之路 更多Java相关知识,欢迎访问!