zoukankan      html  css  js  c++  java
  • MySQL-----笔记3:存储引擎

    1、存储引擎:

    https://zhidao.baidu.com/question/1049565846666168579.html

    MySQL中的数据用各种不同的技术存储在文件(或者内存)中。这些技术中的每一种技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力。通过选择不同的技术,你能够获得额外的速度或者功能,从而改善你的应用的整体功能。

    例如,如果你在研究大量的临时数据,你也许需要使用内存存储引擎。内存存储引擎能够在内存中存储所有的表格数据。又或者,你也许需要一个支持事务处理的数据库(以确保事务处理不成功时数据的回退能力)。

    这些不同的技术以及配套的相关功能在MySQL中被称作存储引擎(也称作表类型)。

    2、MySQL的存储引擎:MyISAM和InnoDB(默认)

    • 如果要提供提交、回滚、崩溃恢复能力的事物安全(ACID兼容)能力,并要求实现并发控制,InnoDB是一个好的选择。支持行锁定和外键。维持自己的缓冲池,支持外键完整性约束。
    • 如果数据表主要用来插入和查询记录,不支持事物,则MyISAM引擎能提供较高的处理效率。
    • 如果只是临时存放数据,数据量不大,不需要较高的安全性,可以选择将数据保存在内存中的Memory引擎中。

    (1)InnoDB锁模式:

    InnoDB实现了两种类型的行锁。

    ①共享锁(S):允许一个事务去读一行,阻止其他事务获得相同的数据集的排它锁。

    即我读的时候,你也可以读但是不能写。

    ②排它锁(X):允许获得排他锁的事务更新数据,但是其他事务不可以获得共享锁和排它锁。

    即我写的时候,你不能读也不能写。

    这两个锁就是就是MyISAM的读锁和写锁,只是针对的对象不同。

    InnoDB还有两个表锁

    意向共享锁(IS):表示事务准备给数据行加入共享锁,即一个数据行加共享锁前必须先取得该表的IS。

    意向排他锁(IX):表示事务准备给数据行加入排它锁,即一个数据行加排它锁前必须先取得该表的IX。

    锁的实现方式:

    在MySQL中,行级锁并不是直接锁记录,而是锁索引。如果没有索引,InnoDB会通过隐藏的聚簇索引来对记录加锁,即其对表中所有数据加锁,实际效果和表锁一样。

    行锁分为三种情形:

    Record lock:对索引加锁,即锁定一条记录。

    Gap lock:对索引项之间的间隙加锁,不锁记录。即锁定一个范围的记录。

    Next-key Lock:锁定一个范围的记录并包含记录本身(上面两种锁的结合)

    死锁产生:互斥条件、请求和保持条件、不剥夺条件、环路等待条件

    互斥:一段时间内某资源只能由一个进程使用。

    请求保持条件:进程已经保持至少一个资源,但又提出新的资源请求,该资源被其他进程占有,此时请求阻塞,而自己的资源不释放。

    不剥夺条件:进程所获得的资源在未使用完之前,不能被剥夺。

    环路等待条件:在发生死锁时,必然存在一个进程---资源的环形链,即p0申请p1的资源,p1申请p0的资源。

    避免死锁的方法:

    ①表:按照约定以相同顺序访问表,可以降低死锁机会。

    ②事务:在同一个事务中,尽可能做到一次锁定所需要的所有资源

    ③对于非常容易产生死锁的业务部分,可以尝试使用升级锁定颗粒度,通过表级锁定来减少死锁产生的概率。

    3、MySQL体系结构

     

    mysql由连接池组件、管理服务和工具组件、sql接口组建、查询分析器组件、优化器组件、缓存组件、插件是存储引擎、物理文件。

  • 相关阅读:
    倒立摆
    Mybatis在oracle、mysql、db2、sql server的like模糊查询
    BUG系列:转让startActivityForResult()&onActivityResult()没有反应
    建立地方Jekyll周边环境
    HDU 1535 Invitation Cards (POJ 1511)
    STM8S---IO复用配置(STVP方式)
    【菜鸟看框架】——EF怎样自己主动生成实体
    Keywords Search (ac 自己主动机)
    liGDX life_cycle (生命周期)
    html浏览器兼容性的 JavaScript语法
  • 原文地址:https://www.cnblogs.com/Lee-yl/p/9064730.html
Copyright © 2011-2022 走看看