MySql数据库理解

  在之前的面试过程中,有被问到很多次,关于MySQL数据库相关知识,其中有问到了解存储引擎,数据库优化等问题,问得一脸懵X,确实以前在学习的时候没有去深入了解过这一块儿,今天找到了相应的数据库视频,稍稍做一点点总结。

一、MySQL数据库的存储引擎分类

  如下图所示:

  

  从上图可以看出,各种存储引擎之间的区别:

    其中MySql5.5版本默认使用的是InnoDB存储引擎。当然,其中也有提到关于锁的概念。

  特别对比:

    MyISAM :存储限制可达256TB,支持索引、表级别锁以及数据压缩。

    InnoDB : 存储限制为64TB,支持事务和索引,锁颗粒为行锁,但并不支持数据压缩,唯独只有它支持外键!

二、MySQL数据库锁的概念:

  通常,在一个web项目中,对于数据库表查询是很容易产生并发情况的,例如某一个用户正在对其中一张表的t_name字段进行修改,而此时另外一个用户也在对这张表进行查询,那么就很有可能导致读取的用户读到不正确的数据。所以,就产生了表锁。

  其中,我已知的针对数据库表的锁有悲观锁、乐观锁、排他锁、共享锁、表锁、行锁等。

  悲观锁:顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。

  乐观锁:顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号等机制。乐观锁适用于多读的应用类型,这样可以提高吞吐量。像数据库如果提供类似于write_condition机制的其实都是提供的乐观锁。

  更多知识下回分解。。。。。。

posted @ 2018-11-07 15:42  孤独猿  阅读(844)  评论(0编辑  收藏  举报