大家好,欢迎来到IT知识分享网。
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 秒)
注意:
设置保存点可以让我们在失败的时候回到保存点,而不是回到事务开启的时候。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/143255.html