mysql ----- 引擎


1. mysql 常见的索引有Myisam InnoDB BDB Memory Archive

2. 其中innodb 引擎创建的表移动到其他数据库之后会无法打开,因为在innodb中数据库和表是绑定的,只有将数据库和表一起移动才能打开里面的表.


以下来自点击打开链接https://luyucheng.cnblogs.com

一、锁

MySQL各存储引擎使用了三种类型(级别)的锁定机制:表级锁定,行级锁定和页级锁定。

(1) 表级锁定

表级锁定是mysql中支持的最大颗粒度的锁,该锁定实现逻辑非常简单,带来系统负面影响极小,所以获取或释放锁的速度极快,表级锁一次锁定整张表,能很好地规避死锁问题。但是,由于其颗粒度比较大,出现锁定资源占用的概率更高,致使并行度大大降低。

(2) 行级锁定

行级锁定最大的特点就是锁定对象的颗粒度极小,也是目前各大数据库能够实现的颗粒度最小的锁,由于颗粒度较小,所以出现锁定资源占用的概率也就较小,能够更好的实现高并发。虽然行级锁能更好的的实现高并发,但由于锁定资源的颗粒度小,所以每次获取和释放锁的要做的事情也就更多,另外行级锁很容易出现死锁问题

(3) 页级锁定

页级锁定是MySQL中比较独特的一种锁定级别,在其他数据库管理软件中也并不是太常见。页级锁定的特点是锁定颗粒度介于行级锁定与表级锁之间,所以获取锁定所需要的资源开销,以及所能提供的并发处理能力也同样是介于上面二者之间。另外,页级锁定和行级锁定一样,会发生死锁。
在数据库实现资源锁定的过程中,随着锁定资源颗粒度的减小,锁定相同数据量的数据所需要消耗的内存数量是越来越多的,实现算法也会越来越复杂。不过,随着锁定资源颗粒度的减小,应用程序的访问请求遇到锁等待的可能性也会随之降低,系统整体并发度也随之提升。
使用页级锁定的主要是BerkeleyDB存储引擎。
总的来说,MySQL这3种锁的特性可大致归纳如下:
表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低;
行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高;    
页面锁:开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般。

适用:从锁的角度来说,表级锁更适合于以查询为主,只有少量按索引条件更新数据的应用,如Web应用;而行级锁则更适合于有大量按索引条件并发更新少量不同数据,同时又有并发查询的应用,如一些在线事务处理(OLTP)系统。

二、

1.MySQL表级锁的锁模式
MySQL的表级锁有两种模式:表共享读锁(Table Read Lock)和表独占写锁(Table Write Lock)。锁模式的兼容性:
对MyISAM表的读操作,不会阻塞其他用户对同一表的读请求,但会阻塞对同一表的写请求;
对MyISAM表的写操作,则会阻塞其他用户对同一表的读和写操作;
MyISAM表的读操作与写操作之间,以及写操作之间是串行的。当一个线程获得对一个表的写锁后,只有持有锁的线程可以对表进行更新操作。其他线程的读、写操作都会等待,直到锁被释放为止。
2.如何加表锁
MyISAM在执行查询语句(SELECT)前,会自动给涉及的所有表加读锁,在执行更新操作(UPDATE、DELETE、INSERT等)前,会自动给涉及的表加写锁,这个过程并不需要用户干预,因此,用户一般不需要直接用LOCK TABLE命令给MyISAM表显式加锁。

猜你喜欢

转载自blog.csdn.net/qwerlol123456/article/details/80831013