文章已同步至GitHub开源项目: Java超神之路
-
事务是一个不可再分的操作要么都发生,要么都不发生。
-
事务必须使数据库从一个一致性状态转换到另外一个一致性状态。
-
事务的隔离性是指一个事务的执行不能被其他事务干扰,即事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
-
持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,按下来的其他操作和数据库故障不应该对其有任何影响。
事务没有明显的开启和结束标记,默认是开启自动提交的。
- 首先将自动提交关闭。
set autocommit = 0;
- 开启事务(可选)
start transaction;
- 编写SQL语句
CRUD....
- 结束事务
commit; #提交
rollback; #回滚
-
某个事务读取了别的事务修改的但未提交的数据。
-
不可重复读:对于两个事务T1,T2,T1读取了一个字段,然后T2更新了该字段之后,T1次读取同一个字段值就不同了
-
幻读:对于两个事务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相关知识,欢迎访问!