MySQL----TCL (事务) 语言

序言: 致每一位读者:你们好! 我叫 Changlon [昌龙] ; 是和各位一样奔跑在编程道路上,期望 用编程改变世界,改善生活的奔跑者。

写文章的初心: 方便以后复习,方便未来面试,结交更多道友,交流心得经验…

如果你也对 前端 , Java , C/C++, 算法, 人工智能 感兴趣那就关注我吧!我们一起学习进步!

相关文章
点击查看 MySQL系列文章

一、含义

事务:一条或多条sql语句组成一个执行单位,一组sql语句要么都执行要么都不执行

二、特点(ACID)

A 原子性

一个事务是不可再分割的整体,要么都执行要么都不执行

C 一致性

一个事务可以使数据从一个一致状态切换到另外一个一致的状态

I 隔离性

一个事务不受其他事务的干扰,多个事务互相隔离的

D 持久性

一个事务一旦提交了,则永久的持久化到本地

三、事务的使用步骤 ★

了解:
隐式(自动)事务:没有明显的开启和结束,本身就是一条事务可以自动提交,比如 insert update delete
显式事务:具有明显的开启和结束

使用显式事务:

①开启事务 set autocommit=0;
start transaction;#可以省略

②编写一组逻辑sql语句 注意:sql语句支持的是insert、update、delete

设置回滚点: savepoint 回滚点名;


③结束事务 提交:commit; 回滚:rollback;
回滚到指定的地方:rollback to 回滚点名;

四、并发事务

1、事务的并发问题是如何发生的?

多个事务 同时 操作 同一个数据库的相同数据时

2、并发问题都有哪些?

脏读: 对于两个事务 T1, T2, T1 读取了已经被 T2 (更新) 但还没有被提交的字段. 之后, 若 T2 回滚, T1读取的内容就是临时且无效的.

不可重复读: 对于两个事务T1, T2, T1 读取了一个字段, 然后 T2 (更新)了该字段. 之后, T1再次读取同一个字段, 值就不同了


幻读: 对于两个事务T1, T2, T1 从一个表中读取了一个字段, 然后 T2 在该表中(插入) 了一些新的行. 之后, 如果 T1 再次读取同一个表,
就会多出几行.

3、如何解决并发问题

通过设置隔离级别来解决并发问题

4、隔离级别

在这里插入图片描述

五、案例演示

  • 1.演示事务的使用步骤
#开启事务
SET autocommit=0;
START TRANSACTION;
#编写一组事务的语句
UPDATE account SET balance = 1000 WHERE username='张无忌';
UPDATE account SET balance = 1000 WHERE username='赵敏';

#结束事务
ROLLBACK;
#commit;

SELECT * FROM account;
  • 2.演示事务对于delete和truncate的处理的区别
SET autocommit=0;
START TRANSACTION;

DELETE FROM account;
ROLLBACK;
##delete 可回滚,truncate不可回滚
  • 3.演示savepoint 的使用
SET autocommit=0;
START TRANSACTION;
DELETE FROM account WHERE id=25;
SAVEPOINT a;#设置保存点
DELETE FROM account WHERE id=28;
ROLLBACK TO a;#回滚到保存点

SELECT * FROM account;

由于本人技术水平有限,博客中难免出现的一些错误,有纰漏之处恳请各位大佬不吝赐教!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

智者_若愚

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值