MySQL基础—02:存储引擎及特点

MySQL提供了插件式的存储引擎架构。存储引擎是基于表的,而不是基于库的。

MySQL常用的存储引擎包括 MyISAM、InnoDB 和 Memory 。

 


一、MyISAM

  • 特点:表级锁,不支持事务,不支持外键,读写速度快,支持全文索引。支持3种不同的存储格式,分别是:静态表,动态表,压缩表。MySQL5.5.8之前MyISAM是MySQL默认的存储引擎。
  • 使用场景:要支持全文索引。

 


二、InnoDB

  • 特点:行级锁(默认)、表级锁,支持事务,支持外键约束,支持自动增长列,InnoDB通过多版本并发控制(MVCC)来获得高并发性,MySQL5.6开始支持全文索引。MySQL5.5.8开始InnoDB成为MySQL默认的存储引擎。

 

  • 使用场景:
  1. 更新密集的表。InnoDB存储引擎特别适合处理多重并发的更新请求。
  2. 事务。InnoDB存储引擎是支持事务的标准MySQL存储引擎。
  3. 自动灾难恢复。与其它存储引擎不同,InnoDB表能够自动从灾难中恢复。
  4. 外键约束。MySQL支持外键的存储引擎只有InnoDB。
  5. 支持自动增加列AUTO_INCREMENT属性。

 


三、Memory

  • 特点:(之前被称为Heap存储引擎),表级锁,将表数据存储在内存当中,表结构以文件存储于磁盘。访问速度非常快,数据在MySQL重启或者崩溃时会丢失,要求存储数据长度不可变,所以无法使用BLOB和TEXT。默认使用Hash索引,还可以选择使用B-Tree索引。

 

  • 使用场景:
  1. 临时的数据:目标数据只是临时需要,在其生命周期中必须立即可用。
  2. 相对无关的数据:存储在MEMORY表中的数据如果突然丢失,不会对应用服务产生实质的负面影响,而且不会对数据完整性有长期影响。

 

 


四、相关命令 

  • 查询MySQL系统中支持的存储引擎
show engines;

 

  • 查看MySQL当前默认存储引擎
show variables like '%storage_engine%';

 

  • 指定存储引擎为InnoDB
CREATE TABLE 表名(

    ......

) ENGINE = INNODB;

 

修改表的存储引擎为InnoDB

ALERT TABLE 表名 ENGINE = INNODB;

//使用ALERT TABLE修改表的存储引擎可能导致数据库中的数据丢失,所以在修改前,需要备份数据。

 

 

 


五、三种锁:

  • 表级锁:直接锁定整张表,表共享读锁(Table Read Lock)和表独占写锁(Table Write Lock)。
  • 行级锁:单独的一行记录加锁,仅对指定的记录进行加锁,这样其它进程还是可以对同一个表中的其它记录进行操作。共享锁(S)和排他锁(X)。
  • 页面锁:表级锁速度快,但冲突多,行级冲突少,但速度慢。所以取了折衷的页级,一次锁定相邻的一组记录。

 

三者区别:

  • 表级锁: 开销小,加锁快;不会出现死锁(因为MyISAM会一次性获得SQL所需的全部锁);锁定粒度大,发生锁冲突的概率最高,并发度最低。
  • 行级锁: 开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。
  • 页面锁:开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般。

 

 

 


如有错误,欢迎留言指正  * _ *

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值