zoukankan      html  css  js  c++  java
  • 数据库知识(一) : ACID (未完成)

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

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

    可重复读的实现方式:

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

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

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

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

  • 相关阅读:
    USACO training course Mother's Milk /// DFS(有点意思) oj10120
    USACO training course Checker Challenge N皇后 /// oj10125
    USACO 2013 January Silver Painting the Fence /// oj23695
    关于priority_queue和sort()对结构体数组的排序
    USACO 2012 March Silver Tractor /// 优先队列BFS oj21567
    NEERC 2015 Adjustment Office /// oj25993
    合并石头(直线+圆圈+强化+优化)
    可持久化树模板
    1047 邮票面值设计 (DFS+DP)
    多线程DP (要一起行动才可以)
  • 原文地址:https://www.cnblogs.com/jasonbourne3/p/14099823.html
Copyright © 2011-2022 走看看