目录

事物的基本操作

事物的隔离级别

事物的特性


事物:事物是一组DML语句构成,这些语句在逻辑上存在相关性,这一组DML语句要么全部成功,要么全部失败。

事物的基本操作

  1. 开始一个事物:start transaction;
  2. 保存一个保存点:savepoint   保存点名;
  3. 回到保存点 :rollback to 保存点名;
  4. 提交事物 : commit;

没有设置保存点也可以回滚,只不过会回滚到事物的最开始(前提:事物还没有被提交)

事物被提交之后,就无法再回滚了

事物的隔离级别

多个事物是相互独立的,但是如果多个事物操作同一批数据,就会引发一些问题

mysql 事件开始执行 mysql事物开始_隔离级别

  • 设置事物的隔离级别: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,事物会回滚到开始点