我是靠谱客的博主 自然香氛,最近开发中收集的这篇文章主要介绍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;

最后

以上就是自然香氛为你收集整理的10.数据库事物及其操作的全部内容,希望文章能够帮你解决10.数据库事物及其操作所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(54)

评论列表共有 0 条评论

立即
投稿
返回
顶部