目录
前言
本贴记录了我看b站上网课关于MySQL数据库事务的一些笔记,以及我对事务的理解
一、事务的基本介绍
1、事务的基本理解
我对事务的理解是,事务就像游戏存档,开启一个事务就像开启了一段游戏存档。在事务开启以后,还可以设置保存点,可以类比游戏中的一个存档,设置保存点后(在游戏中对游戏进行存档),在设置保存点之前的所有对数据库的增删改都会被保存起来。如果像回到以前可以打开之前的存档。
以下是b站韩顺平老师的ppt介绍
2、事务的保存点
开启一个事务后,如果数据库中的表a是空的,往数据库中添加十条信息后,设置一个保存点flag1。此时数据库中有十条数据,再往数据库中添加十条数据,此时的数据库就有二十条数据了。然后还可以再设置一个保存点flag2.
3、事务的回退
如果在设置好保存点flag2后,发现第二次添加的是条数据是错误的,不想要了,可以选择回退到保存点flag1。回退之后,数据库里的数据就返回到了第一次设置保存点flag1时的状态(我理解成可以有反悔的机会)。
注意回退到保存点flag1之后,无法再回到保存点flag2。
4、事务的提交
还有一个提交事物语句(commit),执行此语句后,开启事务后所有的操作生效,无法再选择回退事务。
5、事务的锁
当开启一个事务时,为了保证数据的完整性和安全性,MySQL会自动为表上锁,防止其他用户在一个事务开始后修改表的数据,或对其他用户的操作造成误读(类似于多线程中锁的功能)。
二、事务的基本操作:
1、开启一个事务
语句为:start transaction;
2、设置保存点
语句为:savepoint flag1;保存点名为flag1。
3、回退事务
语句为:rollback to flag1;回退到flag1。
4、回退全部事务
语句为:rollback;可以回退到开始事务的状态;
5、提交事务
语句为:commit;提交事务所有事物生效,不能回退;
三、演示:
开始一个事务:
查询student表:
修改id为1的数学成绩:
设置保存点flag1:
修改id为2的数学成绩:
设置保存点flag2:
回退到保存点flag1:
回退到开始事务的时候:
提交事务: