目录
事物的基本操作
事物的隔离级别
事物的特性
事物:事物是一组DML语句构成,这些语句在逻辑上存在相关性,这一组DML语句要么全部成功,要么全部失败。
事物的基本操作
- 开始一个事物:start transaction;
- 保存一个保存点:savepoint 保存点名;
- 回到保存点 :rollback to 保存点名;
- 提交事物 : commit;
没有设置保存点也可以回滚,只不过会回滚到事物的最开始(前提:事物还没有被提交)
事物被提交之后,就无法再回滚了
事物的隔离级别
多个事物是相互独立的,但是如果多个事物操作同一批数据,就会引发一些问题
- 设置事物的隔离级别:set session transaction isolation level read uncommitted;
- 查看当前的隔离级别:select @@tx_isolation;
MySQL的这种隔离机制,可以让不同的事物在进行操作数据时,具有隔离性,从而保证数据的一致性
无隔离性则会出现数据的脏读(一个事物正在访问数据,并且对其进行了修改,但是还没有提交到数据可中,此时,另一个事物也访问了这个数据,并且使用),
不可重复读(在一个事物内,多次读同一数据,在这个事物还没有结束的时候,另一个事物也在访问该数据,那么,在第一个事物的两次读数据之间,由于第二个事物的修改,那么第一个事物两次读到的数据可能是不一样的),
幻读(一个事物操作数据表中所有记录,另一个事物添加了一条数据,则第一个事物查不到自己的修改)等问题。
不可重复读的重点是修改,幻读的重点在于新增或者删除
事物的特性
- 原子性:事物是应用中最小的执行单位
- 一致性:事物执行的结果,必须使数据库从一个一致状态变为另一个一致状态
- 隔离性:各个事物的执行互不干扰,任何一个事物的内部操作对其他并发事物都是隔离的
- 持久性:一个事物一旦提交,它对数据库所做的改变都要记录到永久存储其中
查询事物的默认提交方法:
select @@autocommit;
1:代表自动提交 0:代表手动提交
修改默认提交方法:
set @@ autocommit = 0;
commit;如果没有commit语句,只是临时的更新
事物:如果一个包含多个步骤的业务操作被事物管理,要么同时成功,要么同时失败
例如:A给B转账500元
操作步骤:1.查询A账户的金额是否大于500
2.A账户金额-500
3.B账户金额+500
假设此刻在步骤2出错,那么在尾部执行rollback,事物会回滚到开始点