mysql执行完语句怎么回退_【mysql学习笔记】-事务处理

1.基本概念

1)事务:指一组SQL语句,是在一次逻辑中对数据库执行的一系列操作

2)回退:指撤销指定SQL语句的过程

3)提交:指将未存储的SQL语句结果写入数据库表

4)保留点:指事务处理中设置的临时占位符,可以对它发布回退

5)事务处理:事务处理可以用来维护数据库的完整性,它保证成批的mysql操作要么完全执行,要么完全不执行

2.事务的性质

1)原子性:事务中定义的一系列操作,要么完全执行,要么完全不执行

2)一致性:必须使所有的数据都保持一致的状态。比如:A账户和B账户各有1000块钱,不论它们之间怎么相互转账,都应该保持账户总额为2000元。

3)持久性:事务成功提交的数据应该永远保存在数据库。

4)隔离性:如果有多个事务操作同一条数据,应该保证事务之间不会相互影响。

3.数据库事务执行会出现的问题

事务出现的问题就是多线程操作,即多个线程操作同一条数据。主要会出现的问题如下:

1)第一类更新问题:事务之间会覆盖掉其他已提交事务

例子如下:

0818b9ca8b590ca3270a3433284dd417.png

最后账户的余额应该是1000元,中间的问题很明显,事务A覆盖了事务B的部分操作,结果就导致银行客户损失了100元。

2)脏读问题:读了还未提交的数据。

例子如下:

0818b9ca8b590ca3270a3433284dd417.png

事务过程如上,问题很明显,读了不该读的数据,结果导致银行损失了1000元。

3)幻读:前后读取结果的记录数不一样。

例子如下:

0818b9ca8b590ca3270a3433284dd417.png

4)不可重复读:前后读取的结果的值不一样

例子如下:

0818b9ca8b590ca3270a3433284dd417.png

4.MySql数据事务处理语句

1)标示事务处理开始:start transaction

2)回退:rollback。注意:rollback只能在一个事务处理内使用,在执行一条start transaction命令之后;事务处理用来管理insert、update和delete语句,不能回退select语句。例子如下:

select * from ordertotals;

start transaction;

delete from ordertotals;

select * from ordertotals;

rollback;

select * from ordertotals;

3)提交:commit。一般的mysql语句都是隐含提交,即提交操作是自动进行的。但是,在事务处理块中,提交不会隐含地进行,要使用commit语句。

4)使用保留点:为了支持回退部分事务处理,必须能在事务处理块中合适的位置放置占位符。这样,如果要回退,就可以回退到某个占位符,这些占位符就称为保留点。如:

savepoint delete1;

rollback to delete1;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值