• 数据库知识(一) : ACID (未完成)


    关系型数据库的事务 具有ACID 四个特征:

    1.  原子性:一个事务的执行,要么全部提交成功,要么全部失败回滚,不能只执行一部分操作。
    2.  一致性:事务的执行不能破坏数据库数据的完整性和一致性,一个事务在执行前后,数据库都必须处于一致性状态。
    3.  隔离性:当数据库上有多个事务同时执行时,就有可能出现脏读、幻读、不可重复读等问题。为了解决这些问题,就有了隔离级别的概念。注:隔离级别越高,效率越低。
        • 读未提交 :一个事务还未提交时,它所做的变更可以被其他事务看到。
        • 读已提交 :一个事务提交后,它所做的变更可以被其他事务看到。
        • 可重复读:一个事务执行过程中 所看到的数据,始终是和事务启动时看到的数据是一致的。
        • 串行化:对同一行记录,写加写锁  读会加读锁,当出现读写冲突时。后访问的事务必须等前一个事务执行完成,才能继续执行
    4.  持久性:一旦事务提交,那么它对数据库中对应数据的变更就会永久保存在数据库中,即使系统崩溃或机器宕机,只要数据库能重新启动,那么一定能够将其恢复到事务成功结束的状态

    可重复读的实现方式:

          在mysql中,实际上每条记录在更新的时候都会同时记录一条回滚操作。记录上的最新值,通过回滚操作,都可以得到一个以前状态的值。假设一个字段由1依次被改成了2、3、4。字段的当前值是4,

    但在查询这条记录时,不同时刻启动的事务会有不同的read-view,不同的视图记录着不同的值。也就是说同一条记录在系统中可以存在多个版本。这就是数据库的多版本并发控制(MVCC)。

        因为当系统判定没有事务用到回滚日志时,回滚才会被清理。所有要避免使用长事务,长事务会导致系统里面存在很老的 read-view,由于事务未执行完成,随时可能访问这些数据,所以必须等事务完成之后,才可以清理

    这就会导致占用大量的存储空间,其次长事务还占用锁资源,也可能拖垮整个库。

  • 相关阅读:
    邮件系列3 --- 安全传输
    配置postfix支持虚拟域和虚拟用户
    Postfix+Sasl+Courier-authlib+Dovecot+MySQL+extmail 邮件系统部署
    在switch中的case语句中声明变量编译出错的解决方案
    关于自控力
    PUTTY使用Ctrl+s僵死的问题
    sqlite3里类似top的用法
    二维数组、行指针、指针数组、二级指针
    sqlite3_exec函数的使用
    基于s5pv210嵌入式linux使用其他动态、静态库文件程序的交叉编译
  • 原文地址:https://www.cnblogs.com/jasonbourne3/p/14099823.html
Copyright © 2020-2023  润新知