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接口组建、查询分析器组件、优化器组件、缓存组件、插件是存储引擎、物理文件。

最新文章

  1. Android开发之基于AndroidStudio环境搭建和工程创建
  2. 替换CENTOS自带的yum源为网易163镜像源
  3. The Adapter of ListView: Just adapt data to view, don’t do anything else
  4. java 虚拟机--新生代与老年代GC
  5. Android Design Support Library——TextInputLayout
  6. some windowsphone templates
  7. 用 EasyBCD 在 Win7/8 中硬盘安装 Ubuntu
  8. centos环境配置
  9. 【Python开发实战】Windows7+VirtualBox+Ubuntu环境配置
  10. 基于visual Studio2013解决C语言竞赛题之1083人机博弈
  11. Dell-R730 【Pxe+dhcp+ftp+tftp+Kickstart+CentOs6.6】
  12. 分布式高并发下Actor模型
  13. Linux 下Tomcat配置远程访问管理端
  14. Ubuntu下安装JDK图文教程详解 jdk-java6-30 .bin 的处理方法
  15. npm publish 发布
  16. windows下beautifulsoup使用lxml解析使用报错
  17. Pthreads 环境配置,VisualStudio
  18. Alluxio集成Hadoop
  19. 2062326 齐力锋 实验三《敏捷开发与XP实践》实验报告
  20. 【JUnit4.10源码分析】6.1 排序和过滤

热门文章

  1. Mysql学习总结(38)——21条MySql性能优化经验
  2. Eureka 服务的注册和发现
  3. hdu 1829 带权并查集的运用类似于食物链但是更简单些
  4. 用JAVA的抽象类实现编码组合进度的灵活性
  5. H - Can you answer these queries? ( POJ - 3264 )
  6. Mycat分表分库
  7. CSS3 timing-function: steps()介绍
  8. luogu2766 最长不下降子序列问题 DP 网络流
  9. 【撸码caffe 一】syncedmen.hpp
  10. TF-IDF算法--关键词句和文本集中每篇文章相关度计算