美文网首页
Mysql(三) -- 数据库事务

Mysql(三) -- 数据库事务

作者: OakesYa | 来源:发表于2020-07-15 19:28 被阅读0次

数据库事务是什么

我们这里借用百度百科的说明:数据库事务( transaction)是访问并可能操作各种数据项的一个数据库操作序列,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。事务由事务开始与事务结束之间执行的全部数据库操作组成。

ACID

ACID是数据库事务的四大特性,是由数据库完成的。其中ACD通过日志来实现,因为日志记录了用户对数据库的所有操作,而I实现比较复杂,涉及快照,MVCC,锁等,后面会专门学习一下。下面我们就来仔细的了解一下这四个属性

  • A(atomicity) 原子性
    由于事物可有多个操作组成,原子性可以保证这些操作要么都执行成功,要么都失败。
  • C(consistency) 一致性
    几个并行执行的事务,起执行结果与串行执行的结果一致
  • I(isolation) 隔离性
    事务的执行不受其他事务的干扰,事务执行的中间结果对其他事务必须是透明的。可以保证多个事务对同一数据操作的安全性。
  • D(durability) 持久性
    当事务执行成功之后,系统保证事务的操作被永久的写入到数据库磁盘中。

四种隔离

四种隔离级别
我们可以看到数据库的隔离级别有四种,分别是读未提交(Read Uncommitted),读已提交(Read Committed),可重复读(Repeated Read),串行化(Serializable)。Mysql默认级别的是可重复读。SqlServer默认是读已提交。我们看到表格上面的有脏读,不可重复读,幻读,我们来说说这是啥。
  • 脏读
    A事务修改了数据库,但是此时没有提交,而B事务读取到了A事务的修改就是脏读。
  • 不可重复读
    A事务在事务中需要多次读取同一条记录,而事务B对记录进行了修改并提交导致A在事务中读取的数据不一致
  • 幻读
    A事务在事务中当执行完全相同的查询,但是得到了不同的结果集。

我们上面分析了三种读取数据可能发生的问题,那我们现在就来看看四种隔离级别。

  • Read Uncommited
    我们看名字就能理解该级别是事务可以读取到其他没有提交的事务所做的数据修改。没有任何加锁,所以隔离级别最低。
  • Read Committed
    读已提交就是可以读到已提交的数据,解决了脏读的问题,但是没有解决不可重复读和幻读。
  • Repeated Read
    可重复读就是解决了不可重复读的问题,但是仍然可能存在幻读。
  • Serializable
    序列化通过将事务强制排序执行,解决幻读问题。

相关文章

  • 数据库笔记

    数据库 数据库⭐MySQL 默认存储引擎InnoDB(事务性存储引擎)一、事务 数据库事务? 数据库事务有什么作用...

  • 事物处理

    MySQL 事务 在 MySQL 中只有使用了 Innodb 数据库引擎的数据库或表才支持事务。 事务处理可以...

  • MySQL锁简介

    备注:测试数据库版本为MySQL 8.0 这个blog我们来聊聊MySQL 事务 一.MySQL锁概述 数据库锁定...

  • Mysql innodb SQL语句加锁方式

    mysql innodb存储引擎支持事务,是mysql的默认存储引擎。 数据库事务 事务是由一组sql语句组成的逻...

  • 理解:事务的隔离级别

    一、数据库事务的ACID属性二、事务的隔离级别三、读写异常四、事务隔离级别与读写异常的关系五、MYSQL实践演示六...

  • MySQL数据库高级(七)——事务和锁

    MySQL数据库高级(七)——事务和锁 一、事务简介 1、事务简介 事务(Transaction) 是指作为单个逻...

  • 聊聊数据库事务

    本文主要基于Mysql数据库的InnoDB存储引擎介绍事务相关知识。 1.先来说说数据库引入事务的目的。 事务...

  • 聊聊MySQL的隔离级别

    原文:聊聊MySQL的隔离级别 | MySQL隔离级别原理参考:oracle - mysql - 数据库事务隔离级...

  • Mac系统mysql设置事务隔离级别

    Mac系统mysql设置事务隔离级别 MySQL数据库事务隔离级别主要有四种: Serializable 串行化,...

  • mysql事务详解

    数据库事务 1.1数据库版本 Mysql8.0.12 1.2事务是由一组SQL语句组成的逻辑处理单元,事务具有以下...

网友评论

      本文标题:Mysql(三) -- 数据库事务

      本文链接:https://www.haomeiwen.com/subject/gyuqnhtx.html