7.事务
本文最后更新于:2021年10月1日 晚上
事务
概述
事务:事务里面的操作,要么都成功,要么都失败
事务原则:ACID
-
原子性:同一个事务中的操作同时成功或失败,不能只发生一个
-
一致性:事务操作前后的数据完整性一致
-
隔离性:多个用户同时操作,相互不会影响
-
持久性:事务一旦提交就不可逆
如果事务没有提交,那么数据状态保持不变;
如果事务已经提交,那么无论发生什么事情,数据的状态都会保持提交后的状态
事务的隔离级别
脏读
一个事务读取了另一个事务未提交的数据
不可重复读
在一个事务内读取表中的某一行数据,多次读取结果不同
这个不一定是错误,只是场合不对
幻读(虚读)
一个事务内读取到了别的事务插入的数据,导致前后读取不一致
Q: 不可重复读和幻读的区别?
A: 表面上看,似乎两者都表现为两次读取的结果不一致。但不可重复读的重点在于
update
和delete
,而幻读的重点在于insert
所以说,幻读和不可重复读的最大区别在于 如何通过锁机制来解决它们产生的问题
(幻读需要锁表,不可重复读应该只用锁对应的行?)
MySQL事务操作
- MySQL是默认开启事务自动提交的
1 |
|
-
手动处理事务的sql编写逻辑
1
2
3
4
5
6start transaction -- 标记一个事务的开始,从这个之后的sql都在同一个事务内
insert xxx
insert xxx
commit -- 事务结束,提交,数据持久化。只有提交后,上面的操作才能持久化保存
rollback -- 如果失败实施回滚:回到原来的样子。如果已经commit,那么回滚后还是改变后的结果;但如果还没有commit,回滚后是最初w-
savepoint 保存点名
:定义事务处理过程中的保存点rollback to savepoint 保存点名
:回滚的保存点release savepoint 保存点名
:撤销保存点
-
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!