[MySQL] - 事务管理

重点内容 :

本章中重点内容在第四点 [ 事物特性和隔离级别 ] 上 , 需要背诵记忆该部分内容

1. 什么是事务

  1. 什么是事务:数据库的概念,指 事务组成的一级操作单元,要么全部成功,要么全部失败。
  2. 事务的作用:保证多个操作要么全部成功,要么全部失败。
  3. 什么时候使用事务:多条DML语句执行时,要求都成功或都失败。事务无关查询操作
  4. 事务的经典使用场景:张三要给李四转账100
  • 开启事务
  • 执行SQL:张三扣钱100
  • 执行SQL:李四加钱100
  • 关闭事务:提交事务:SQL语句
  • 生效回滚事务:SQL语句撤消

2. 事务管理数据准备-- 事务管理

2.1 准备数据
CREATE TABLE account(
    id INT PRIMARY KEY AUTO_INCREMENT,
    NAME VARCHAR(20),
    money DOUBLE
);
INSERT INTO account (id,NAME,money) VALUES (NULL, 'tom', 1000);
INSERT INTO account (id,NAME,money) VALUES (NULL, 'jerry', 1000);
2.2 手动提交的事务管理
-- 手动提交的事务管理
-- 1. 开启事务
START TRANSACTION;-- 2. tom扣钱100  数据变更没有真正生效,是缓存起来了
UPDATE account SET money = money - 100 WHERE NAME = 'tom';-- 3. jerry加钱100
UPDATE account SET money = money + 100 WHERE NAME = 'jerry';-- 4. 关闭事务:提交事务
-- commit;
-- 4. 关闭事务:回滚事务
ROLLBACK;
2.3 自动提交的事务
  • 管理自动提交的开关设置和查询
-- 自动提交事务  开关进行管理
-- 1. 操作自动提交的开关
-- 1.1 查看自动提交的开关状态
SELECT @@autocommit;
-- 1.2 关闭自动提交的开关
SET autocommit = 0;
-- 1.3 开启自动提交的开关
SET autocommit = 1;通过自动提交开关,进行事务管理-- 2. 通过 自动提交的开关,进行事务管理
-- 2.1 关闭自动提交
SET autocommit = 0;-- 2.2 执行tom扣钱100
UPDATE account SET money = money - 100 WHERE NAME = 'tom';-- 2.3 执行jerry加钱100
UPDATE account SET money = money + 100 WHERE NAME = 'jerry';-- 2.4 关闭事务:提交事务
COMMIT;
-- 2.4 关闭事务:回滚事务
ROLLBACK;

-- 2.5 开启自动提交
SET autocommit = 1;

3. 回滚点(了解)

  • 回滚点:事务里可以回滚到指定的回滚点,而不必回滚事务里所有的操作
-- 回滚点
-- 1. 开启事务
START TRANSACTION;
-- 2. tom扣钱100,余额:900
UPDATE account SET money = money - 100 WHERE NAME ='tom';
-- 3. tom扣钱100,余额:800
UPDATE account SET money = money - 100 WHERE NAME ='tom';
-- 4. 设置一个回滚点,名称:point1
SAVEPOINT point1;
-- 5. tom扣钱100,余额:700
UPDATE account SET money = money - 100 WHERE NAME ='tom';
-- 6. 回滚到point1
ROLLBACK TO point1;
-- 7. 关闭事务:提交事务   tom余额:800
COMMIT;

4. 事物特性和隔离级别(概念性)

4.1 事务的四大特性ACID(面试题)
  • A:Atomicity,原子性。事务不可分割,即:事务里所有操作要成功,都成功;要失败,都失败。不可能成功一半
  • C: Consistency,一致性。事务提交前后,数据是完整一致的
  • I:Isolation,隔离性。多事务并发时,理论上事务应该是完全隔离,相互独立、互不影响的
  • D:Durability,持久性。事务一旦提交,数据变更就永久保存到磁盘文件上了。
4.2 事务的隔离级别和并发问题
4.2.1 事务并发的问题
  • 脏读:一个事务里,读取到了另外一个事务未提交的数据
  • 不可重复读:一个事务里,多次读取的数据不一致;受到了其它事务的update干扰
  • 虚读/幻读:一个事务里,多次读取的数据数量不一致;受到了其它事务的insert、delete干扰
4.2.2 事务的隔离级别
隔离级别脏读不可重复读幻读
read uncommitted
read committed
repeatable read
serializable
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值