3.事务原理与事务回滚

3.事务原理与事务回滚一个事务会涉及到大量的 cup 计算和 IO 操作 这些操作被打包成一个执行单元 要么同时都完成 要么同时都不完成

大家好,欢迎来到IT知识分享网。

1.事务原理

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

1.1自动提交原理图

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

3.事务原理与事务回滚

1.2手动提交原理图

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

3.事务原理与事务回滚

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 秒)

注意:

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

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/143255.html

(0)
上一篇 2025-05-04 20:45
下一篇 2025-05-04 21:10

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信