• MYSQL为什么要有事务?或者说,事务是用来解决什么问题的?


    MYSQL为什么要有事务?或者说,事务是用来解决什么问题的?

    举一个最经典的样例:

    假设进行银行转账,A的账户扣除50元,B的账户增加50元,对应的sql语句如下

    update table set cost = cost - 50 where id = 'A';///step 1
    update table set cost = cost + 50 where id = 'B';///step 2
    

    这样就实现了一次银行转账,理论上是这样没错,但在现实生活中会出现很多问题,例如我执行了第一条语句后,突然电脑蓝屏了/死机了/断电了/电脑被人砸烂了.....

    总之出现了各种各样的问题(被crash后),出现了一种情况:执行了第一条语句,但并没有执行第二条语句

    当电脑恢复重启后,A发现他的账户少了,B的账户却没有变化,钱凭空消失了!

    事务就是为了解决这一个问题——某些操作要么全部发生,要么全部不发生,不能发生一些,这就是数据库的第一个特性——原子性


    事务也被视作数据库的最小工作单位

    好理解,由于原子性——即事务内的操作要么全部发生,要么全部不发生;所以事务被视作一个单位量。

    这样的机制又衍生出了另一个问题:

    当同一时间存在很多事务时,你不能确认哪些事务对数据的操作是正常的、正确的,即哪些事务不需要回滚。

    有可能存在事务A读取了事务B更新后的数据,但事务B在更新后过了一段时间又进行了回滚,那么事务B之前的更新就不作数了

    但是事务A并不知道事务B回滚了,依然拿了错误的数据在自己捣鼓,这样很显然有问题,有大问题!

    所以事务与事务间需要隔离开来,防止有奇奇怪怪的东西混进来(?),这就是我们说的,事务需要——隔离性


    至于ACID剩下两个持久性一致性

    持久性即所有的数据需要持久化到磁盘,必须要持久啊!如果都存在内存里,我辛辛苦苦干一天,重启回到解放前,啥也没有,快乐白给。

    另外:一致性,其实是原子性、隔离性、持久性的目的。

    因为一致性的概念是:在事务开始之前和事务结束以后,数据库的完整性没有被破坏。

    回到开头,为什么要有事务?不就是为了解决钱莫名其妙不见了等等等等的问题吗?保证数据库的完整性才是我们使用事务的目的。

    tips:数据库完整性:指的是数据库的正确性(指的是数据符合语义,反应实际状况)和相容性(指数据库同一对象在不同关系表中数据是符合逻辑的)


    以上为本人手敲,估摸着参考了百度/知乎/CSDN/博客园等等等等的一堆文章,然后自己手写的,如有雷同,纯属巧合(耶)。

    菜鸡一枚,如有错误敬请指正。

  • 相关阅读:
    外键的创建
    MySQL (1366, "Incorrect string value: '\xF0\x9F\x8E\xAC\xE5\x89...' for column 'description' at row 1")
    python 获取文件路径
    ModuleNotFoundError: No module named 'Crypto'
    Django---错误
    CentOS7系统ifconfig无法使用的解决方法
    NACOS集群搭建遇到的问题
    Mysql连接报错:1130-host ... is not allowed to connect to this MySql server如何处理
    CentOS7 yum方式安装MySQL5.7
    MySQL数据库的全局锁和表锁
  • 原文地址:https://www.cnblogs.com/GoodVv/p/16044730.html
Copyright © 2020-2023  润新知