• 数据库事务以及事务的四个特性


    如果你是一名后台程序员开发,那么你一定或多或少的接触过事务。因为相对于高并发,且业务有一定复杂性的系统来说,事务是一定需要的,而且是必须的。他可以帮助我们将若干不同的子任务当成一个整体来完成,以保证整个业务的正确性。
    举个简单的例子:
    在七夕这天,你给你的女票发了一个520红包
    对于钱款转移的这个过程来说,存在两个子任务
    首先从你的余额里扣款(520元)
    同时往你的女票余额里增加钱(520元)
    这两个子任务对于红包业务来说,要么都成功,要么都不成功,不应该存在你扣款了,但是你的女票没有加钱的中间状态。这种被看作一个整体,并且子任务的状态都需要保持一致状态的事情(状态:操作成功,或者完全没有操作成功),我们就称之为事务。(防盗连接:本文首发自http://www.cnblogs.com/jilodream/ )当然这只是一个非常简单的例子。下边是更专业的定义:
    事务是数据库管理系统,在执行的过程中的一个逻辑单位,他由一个有限的数据库操作序列构成。
    其中逻辑单位表示事务不可拆分,结果一致(成功或者失败)
    而我们平常更多的将事务特指DML类型的操作,也就是对数据的增删改,而不是所有的数据库操作,例如其他的建表,删表等。
    这里还要注意的一点是,事务是一个能力,并不是所有的数据库都支持事务的。在mysql中,只有官方自带的引擎只有NDBA和innodb支持事务。
    针对事务,我们从四个方面进行探讨,也就是事务的四大特性---ACID

    下边我们来分别谈谈这四个特性
    A:Atomicity 原子性
    原子性是指啥呢?
    原子Atomicity在希腊语中转化而来,本意就是不可再拆分。最终结果要么就是全部成功,要么就是全部失败,不存在拆分开来,部分成功的场景,也就是是前文所说的逻辑单位。


    D:Durability 持久性
    只要事务提交成功,那么事务对数据库的操作就是一个永久性的作用,不会存在提交后,由于系统的原因,导致操作的效果消失了。


    I :Isolation 隔离性
    数据库存在多个事务同时操作时,应该保证事务时间互相不干扰,操作互相不影响。
    如果像java语言中通过同步锁线性的操作,隔离性的问题肯定可以解决,但是这样操作就导致事务都是串行操作,效率低下,因此可以通过适当的调整隔离性,也就是事务互相之间的可见性的程度,来更好的提高性能。这就是隔离性所牵扯到一个隔离级别的问题,后边的博客中我们会讲到。

    C:Consistency 一致性
    一致性相对于其他特性来说最不容易理解,所以我们放到最后来讲。
    所谓的一致性指的是数据库中的约束不会被打破,这种约束指两部分,
    第一数据库的约束,如金额不能为负值。外键的约束
    第二业务的约束,金额的转出的总额和转入的总额必须要相等。
    这里有一个点,很多文章都解释的不够清楚,觉得一致性是指事务中不同的操作的状态要一致,这个只是字面意思,而字面意思又因为翻译的问题被曲解。所以很多人觉得一致性和原子性的概念很容易混淆,原因就在这里。更不理解为什么说一致性的是AID三个特性的最终目的。(防盗连接:本文首发自http://www.cnblogs.com/jilodream/ )所以更正确的理解应该是数据库事务操作后应该与约束保持一致,这就都理解通了。
    所以特别要注意,这里的Consistentcy与CAP中的C不是一层含义。而是指数据库事务的操作,应该与业务要求保持一致。再啰嗦点,就是说,一致性是指数据要和预期的状态保持一致。因此在严格的意义上来说,一致性并不是数据库的特性,而是应用层(目的)的特性。

    借鉴与:jilodream/王若伊_恩赐解脱

  • 相关阅读:
    [译文] 实体与值对象到底是不是一回事?
    实现 WebApi 自托管服务宿主于 WinForms 及其交互
    [译文] C# 8 已成旧闻, 向前, 抵达 C# 9!
    [译文] 为什么你在 C# 里总是应该使用 "var" 关键字
    通过设置iis在局域网中访问网页
    windows 10 安装使用kafka
    ASP.NET Core 2.1 中的 HttpClientFactory (Part 4) 整合Polly实现瞬时故障处理
    ASP.NET Core 2.1 中的 HttpClientFactory (Part 3) 使用Handler实现传出请求中间件
    ASP.NET Core 2.1 中的 HttpClientFactory (Part 2) 定义命名化和类型化的客户端
    Asp.net Core 2.0 OpenId Connect Handler缺失Claims?
  • 原文地址:https://www.cnblogs.com/ma13461749958/p/14235253.html
Copyright © 2020-2023  润新知