10.数据库事物及其操作

一、数据库事物介绍

我们把完成特定业务的多个数据库DML操作步骤称为一个事物

事物就是完成同一个业务的多个DML操作

二、数据库事物特性(ACID特性)

ACID特性,高频面试题

  • 原子性(Atomicity)

    • 一个事物中的多个DML操作,要么同时执行成功,要么同时执行失败,
  • 一致性(Consistency)

    • 事物执行之前和事物执行之后数据库中的数据是一致的,完整性和一致性不能被破坏
  • 隔离性(Isolation)

    • 数据库允许多个事物同时执行,多个并行的事物之间不能相互影响,如果被影响会破坏事物的一致性
  • 持久性(Durability)

    • 事物完成之后对数据的操作是永久的

三、MYSQL事物管理

3.1、自动提交与手动提交
  • 在MYSQL中,默认DML指令的执行是自动提交的,当我们执行一个DML指令之后会自动同步到数据库中
3.2、开启事物
  • 开启事务就是关闭自动提交

    # 开启事务,将DML操作提交到连接缓存,不自动提交
    start transaction;
    # 事物回滚,清除连接缓存的操作,即撤销当前事物已经执行的操作
    rollback;
    # 提交事物,将连接缓存中的操作写入数据文件
    commit;
    

四、事物隔离级别

数据库允许多个事物并行,多个事物之间是隔离的,相互独立的,如果事物之间不相互隔离,并且操作同一数据时,可能会导致数据的一致性被破坏

MYSQL数据库隔离级别

  • 读未提交(read uncommitted)

    • 允许T2客户端去读T1未提交的数据,可能会导致出现脏读

      脏读:一个事物读取到了另一个事物未提交的数据

  • 读已提交(read committed)

    • T2只能读取T1已经提交的数据,可以避免脏读,可能会导致不可重复读(虚读)

      不可重复读(虚读):在同一个事物中两次查询操作读取到的数据不一致

      例如:T2进行第一次查询之后,T1修改并提交了数据。T2进行了第二次查询,这样的话T2两次查询数据不一致

  • 可重复读(repeatable read)

    • T2执行第一次查询之后,在事物结束之前,其他事物不能修改对应的数据,避免了不可重复读(虚读),导致幻读

      幻读:T2对数据表中的数据进行修改,然后查询,在查询之前,T1向数据表中新增了一条数据,就导致T2以为修改了所有数据,但却查询出了与修改不一致的数据

  • 串行化(序列化)(serializable)

    • 同时只允许一个事物对数据表进行操作,避免了脏读虚读和幻读

五、设置数据库的隔离级别

我们可以通过设置数据库磨人的事物隔离级别来控制事物之间的隔离性,也可以通过哭护短与数据库连接设置来设置事物间的隔离性

MYSQL默认的隔离级别为可重复读

查看MYSDQL数据库的默认隔离级别

# 在MYSQL8.0.3之前
select @@tx_isolation;
# 在MYSQL8.0.3之后
select @@transaction_isolation;

# 设置 read committed
set session transaction isolation level read committed;
# 设置 repeatable read
set session transaction isolation level repeatable read;
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

LyaJpunov

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

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

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

打赏作者

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

抵扣说明:

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

余额充值