3.事务原理与事务回滚

1.事务原理

一个事务会涉及到大量的cup计算和IO操作,这些操作被打包成一个执行单元,要么同时都完成,要么同时都不完成。

1.1自动提交原理图

如果没有显式启动事务,数据库会根据autocommit的值.默认

1.2手动提交原理图

如果开启了事务,其中有任何一条语句因为崩溃或者其他原因无法执行,那么该组所有的SQL语句都不会执行。

1.3事务提交步骤

客户端连接上服务器端,创建链接同时创建当前用户的临时事务日志文件。

开启事务,改变原有的操作机制(所有的操作都会先写入临时日志文件)。

写入SQL,接受并执行SQL,所有的SQL操作都会写入临时文件;返回数据时,从数据库表拿取数据,但要通过临时日志文件加工在返回。

事务提交或回滚,提交:同步临时文件中的SQL操作结果刀数据库表;回滚:清除临时日志文件

2.事务回滚

我们可以在mysql事务处理过程中定义保存点(SAVEPOINT)然后回滚到指定的保存点前的状态。定义保存点,以及回滚到指定保存点前的状态的语法如下:

格式:
savepoint 保存点名; #定义保存点
rollback to savepoint 保存点名; #回滚到指定保存点
或
rollback to 保存点名;

2.1数据表准备

#创建⼀个管理员表
create table manager(
 id int primary key auto_increment,
 uname varchar(20),
 pword varchar(20)
);
#插⼊数据
insert into manager(uname,pword)
values('zhangsan','zhangsan'),('lisi','lisi');
#插⼊数据
insert into manager(uname,pword)
values('wangwu','wangwu'),
('zhaoliu','zhaoliu');

2.3案例

开启事务

向表中插入二条件记录

设置保存点,保存点的名字为:insert_point

向表中插入二条件记录

回到保存点:insert_point

mysql> start transaction;
Query OK, 0 rows affected (0.01 秒)
mysql> insert into manager(uname,pword)
values('zhangsan','zhangsan'),('lisi','lisi');
Query OK, 2 rows affected (0.01 秒)
mysql> select * from manager;
+----+----------+----------+
| id | uname | pword |
+----+----------+----------+
| 1 | zhangsan | zhangsan |
| 2 | lisi | lisi |
+----+----------+----------+
2 ⾏于数据集 (0.01 秒)
mysql> savepoint insert_point;
Query OK, 0 rows affected (0.01 秒)
mysql> insert into manager(uname,pword)
values('wangwu','wangwu'),
('zhaoliu','zhaoliu');
Query OK, 2 rows affected (0.01 秒)
mysql> select * from manager;
+----+----------+----------+
| id | uname | pword |
+----+----------+----------+
| 1 | zhangsan | zhangsan |
| 2 | lisi | lisi |
| 3 | wangwu | wangwu |
| 4 | zhaoliu | zhaoliu |
+----+----------+----------+
4 ⾏于数据集 (0.01 秒)
mysql> rollback to savepoint insert_point;
Query OK, 0 rows affected (0.00 秒)
mysql> select * from manager;
+----+----------+----------+
| id | uname | pword |
+----+----------+----------+
| 1 | zhangsan | zhangsan |
| 2 | lisi | lisi |
+----+----------+----------+
2 ⾏于数据集 (0.01 秒)

注意:

设置保存点可以让我们在失败的时候回到保存点,而不是回到事务开启的时候。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值