事务介绍及操作

事务

定义

事务时用户定义的一个数据库操作序列,这些操作要么全做,要么全不做,是一个不可分割的工作单元。

事务时恢复和并发控制的基本单元

定义事务

事务一般通过 BEGIN TRANSACTION开始。以COMMITROLLBACK结束。COMMIT表示提交,即提交事务的所有操作。

ROLLBACK表示回滚,系统将对事务中对数据库的所有已经完成的操作全部撤销,回滚到事务开始的状态。

事务的ACID特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持续性(Durability)

事务的特性

保证事务ACID特性时事务处理的任务。

事务ACID特性可能遭到破坏的因素有:

(1)多个事务并发运行时,不同事务的操作交叉运行

(2)事务在运行过程中被强行停止。

实例

表数据

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WlrvLuwB-1653906676325)(C:\Users\大勇\AppData\Roaming\marktext\images\2022-05-30-18-13-51-image.png)]

测试事务提交
begin ;
	select * from `match`;
	update `match` set mname = '100米' where mno = '2';
	select * from `match`;
commit;
select * from `match`;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UpMAIuoR-1653906676327)(C:\Users\大勇\AppData\Roaming\marktext\images\2022-05-30-18-14-24-image.png)]

测试事务回滚

这次测试回滚操作

-- 测试回滚
begin ;
	select * from `match`;
	update `match` set mname = '100' where mno = '1';
	select * from `match`;
rollback;
select * from `match`;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cQZXW5Cp-1653906676329)(C:\Users\大勇\AppData\Roaming\marktext\images\2022-05-30-18-18-41-image.png)]

更新后
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ogG6O1pU-1653906676330)(C:\Users\大勇\AppData\Roaming\marktext\images\2022-05-30-18-16-41-image.png)]

回滚
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ohRZiKcM-1653906676331)(C:\Users\大勇\AppData\Roaming\marktext\images\2022-05-30-18-18-14-image.png)]

测试多点回滚

这里可以通过SAVEPOINT 和 ROLLBACK TO 点实现多点回滚,这样可以减少回滚。

begin;
	select * from `match`;
	update `match` set mname = '100米' where mno = '3';
	select * from `match`;
savepoint A1;
	update `match` set mname = '100米' where mno = '4';
	select * from `match`;
savepoint A2;
	update `match` set mname = '100米' where mno = '5';
	select * from `match`;
rollback to A1;
select * from `match`;

原表

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0t66PoBq-1653906676332)(C:\Users\大勇\AppData\Roaming\marktext\images\2022-05-30-18-23-46-image.png)]

预期结果,更新3,对4和5的更新会被回滚,即回滚到A1这个点的时候

这里就不全部都展示了,直接展示最终结果。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JM5Qm0JT-1653906676333)(C:\Users\大勇\AppData\Roaming\marktext\images\2022-05-30-18-25-31-image.png)]

事务隔离级别

在MySQL中事务的隔离级别分为四大等级,读未提交(READ UNCOMMITED)、读提交(READ COMMITED)、可重复读(REPEATABLE READ)、串行化(SERIALIZABLE)

读未提交

读未提交会读到另一个事务的未提交的数据,会读取到“脏数据”,脏数据的意思就是一个事务A对数据进行修改,但是由于一些错误,事务A进行回滚,事务B读到事务A修改时的数据,这样就会导致读“脏数据"。

读提交

解决了“脏数据”的问题,但仍是会出现不可重复读的问题,不可重复读指的是事务B进行数据的读取,事务A需要对数据进行修改,事务B就不能再复现前一次的查询结果

可重复读

可重复读可以解决脏读和不可重复读的问题,但是会带来幻读的问题。幻读指的是比如事务A需要进行读取操作,事务B需要进行插入操作,首先事务A读取到事务B未插入前的数据,事务B插入数据后,事务A可以读取到事务B新插入的数据,这样的现象就可以称为幻读

串行化

一个数据在操作数据库时,其他事务不能操作数据库,可以解决幻读的问题,但是效率低,很少使用

事务故障

定义

某个事务在运行过程中由于种种原因未运行至正常终点就夭折了。

故障类型

事务内部的故障:内部的故障有些是可以通过事务程序本身发现的,有些是非预期的,不能由事务程序处理。
非预期故障的原因:
1. 输入数据有误
2. 运算溢出
3. 违反了某些完整性限制,例如参照完整性,实体完整性
4. 某些应用程序出错
5. 并行事务发生死锁

系统故障:指的是系统停止运行的任何事件,使得系统需要重新启动。
介质故障:系统故障称之为软故障,介质故障称之为硬故障
计算机病毒

总结

本文主要介绍了数据库事务的一些概念,包括回滚、提交等操作,以及一些其他的操作。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值