zoukankan      html  css  js  c++  java
  • mysql总结

    一、ACID+四种隔离级别

      1)ACID的意义

      A,Atomicity原子性,指一个事务是不可分割的单位,这个事务要么全部成功,要么全部失败。

      C,Consistency一致性,事务执行前后数据的状态不变

      I,Isolation隔离性,事务内部的操作与其他事务是隔离的,事务之间不会有任何干扰

      D,Durability持久性,事务一旦提交,他的改变是永久的

       2)mysql底层是如何保证ACID的

      第一:A原子性

        利用Innodb的回滚日志(undo log),记录下你要回滚的相应sql日志信息;

        当事务要回滚的时候,可以利用undo log中的信息回滚到修改之前的状态,比如你delete一条数据,回滚的时候就会update这条数据

      第二:I隔离性

        利用锁和MVCC机制,即多版本并发控制(Multi Version Concurrency Control)

        简单来说,一行数据有多个版本的快照,这些快照都存在undo log中。如果一个事务正则update或者delete操作,读取操作不会等行上锁释放,而是读取该行的快照版本。相反,是需要加锁的。

        整个隔离操作有点“读写复制”的意思了。

        关注MVCC机制,具体可参考这篇文章:

            https://blog.csdn.net/w2064004678/article/details/83012387

      第三:D持久性

        利用Innodb的重做日志(redo log)

        具体来说,当修改数据的时候,一部分在内存操作,一部分在redo log中操作。当事务提交的时候,会将redo log进行刷盘。当数据库宕机重启,会将redo log内容恢复到数据库中,在更加undo log或者是bin log决定是修改数据还是提交数据。

      第四:C一致性

        一致性是依靠原子性、隔离性、持久性来保证的

      3)四种隔离级别与产生的问题

     

    二、mysql语句执行顺序

    查询语句:  

      select *

      from table1

      [left/right] join table

      on condtion1

      where condition2

      group by row1

      having condition3

      order by row2

      limit

    执行的顺序:
      from => join => on => where =>group by => having => order by => limit 

    三、存储引擎的区别

    MyISAM   

      1.不支持外键、事务(ACID),但是操作还是原子性的
      2.支持的是表锁(读锁和写锁):
        1)读锁不阻塞读阻塞写,写锁读和写都阻塞
        2)写锁的优先级大于读锁,有一种现象就是读锁先到等待队列,写锁后到,写锁也会插入到读锁之前。这样读可能有饿死现象

      3.缓存了表的行数,select count(*) from table只需要简单的读取行数就行 
      4.MyISAM表的结构:data/table.frm|table.myd|table.myi
        1)一张MyISAM表由表结构文件(.frm)、数据文件(.myd)、索引文件组成(.myi),存在data文件下面
        2)MyISAM索引和数据是分离的(非聚集),所以查询的过程是.myi====>.myd,这也是一个回表的过程

    Innodb

      1.支持事务、外键
      2.支持行锁,因此可以支持写的并发
      3.不存储总行数,select count(*) from table 要扫描一遍表来计算行
      4.Innodb表结构:
        一句话总结:索引和数据在一起,而且必须要有主键
          1)表数据文件本身就是一个按照B+Tree组织成的一个索引文件,其中叶子节点包含了完整的数据记录
          2)Innodb存储是必须有主键的,没有主键后台选用一个不重复的字段选为主键

    四、索引

    五、主从复制

    六、sql调优

  • 相关阅读:
    【Java】REST风格
    KMP(烤馍片)算法
    Lca求法 (树链剖分 与 倍增)
    hash学习笔记
    星际网络(数学)
    P3537 [POI2012]SZA-Cloakroom (背包)
    乘车路线 (二维最短路)
    渔民的烦恼 (二分)
    Jmeter 常用函数(18)- 详解 __isDefined
    Jmeter 常用函数(17)- 详解 __substring
  • 原文地址:https://www.cnblogs.com/yejiang/p/13499638.html
Copyright © 2011-2022 走看看