目录
一、什么是事务?
事务就是将一组SQL语句放在同一批次内执行,如果一个SQL语句出错,则该批次内的所有SQL都将被取消执行。
二、事务的原则/特性
1.原则性(事务是数据库的逻辑工作单位,事务中包含的各操作要么都做,要么都不做)
2.一致性 (是在事务的开始之前和事务结束以后)
3.隔离性 (事物的执行互不干扰)
4.持久性(事务结束后,数据持久的保存在数据库中)
三、事务的操作步骤
1.关闭自动提交
set autocommit = 0;
2.开启一个事务
start transaction;
3.一组SQL语句
4.关闭事务(结束事务)
1.提交
commit;
2.回滚
rollback;
5.开启自动提交
set atuocommit = 1;
四、事物的隔离级别
MySQL的四种隔离级别
Read Uncommitted(读取未提交)
Read Committed(读提交/不可重复读)
Repeatable Read(可重复读)(MySQL默认的隔离级别)
Serializable(可串行化)
五、事务隔离级别存在的问题
1.跟新丢失:当两个事务选择同一行,然后更新数据,由于每个事务都不知道其他事务的存在,就会发生丢失更新的问题,(你我同时读取同一行数据,进行修改,你commit之后我也commit,那么我的结果将会覆盖掉你的结果)。
2.脏读(Drity Read):某个事务已更新一份数据,另一个事务在此时读取了同一份数据,由于某些原因,前一个RollBack了操作,则后一个事务所读取的数据就会是不正确的。
3.不可重复读(Non-repeatable read):在一个事务的两次查询之中数据不一致,这可能是两次查询过程中间插入了一个事务更新的原有的数据。
4.幻读(Phantom Read):在一个事务的两次查询中数据笔数不一致,例如有一个事务查询了几列(Row)数据,而另一个事务却在此时插入了新的几列数据,先前的事务在接下来的查询中,就会发现有几列数据是它先前所没有的。
六、事物的隔离级别分别可能存在如下问题
事务隔离级别 | 脏读 | 不可重复读 | 幻读 |
读未提交( Read Uncommitted) | 是 | 是 | 是 |
不可重复读(Read Committed) | 否 | 是 | 是 |
可重复读( Repeatable Read) | 否 | 否 | 是 |
可串行化(Serializable) | 否 | 否 | 否 |
扩展:
查看隔离级别:
select @@global.transaction_isolation,@@transaction_isolation;