序言: 致每一位读者:你们好! 我叫 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;
由于本人技术水平有限,博客中难免出现的一些错误,有纰漏之处恳请各位大佬不吝赐教!