5.6版本之前默认是MyISam存储引擎,5.6版本以后默认支持的Innodb存储引擎,这两种也是最经常使用的.html
存储引擎层mysql
存储引擎表由MYD和MYI组成sql
特性(只读还能够接受)shell
并发性和锁级别(表级锁)数据库
表损坏修复,不支持事务缓存
check table tablename 检查表 repqir table tablename 恢复表
# 经过engine指定存储引擎 create table myIsam(id int,c1 varchar(10))engine=myisam;
MyISam表支持的索引类型服务器
MyISAM表支持数据压缩并发
# 命令行: myisampack
适用场景:spa
http://www.javashuo.com/article/p-pjimmmvh-cc.html命令行
判断独立表空间和共享表空间的方法
一、在配置文件my.cnf里面设置innodb_file_per_table=0,重启MySQL服务,建立表common_tablespace,你会在数据目录看到只有common_tablespace.frm文件。
若是表的存储引擎是InnoDB,并且表空间(tablespace)是共享表空间的话,那么数据库对应目录下面是没有"表名.ibd"文件的。独立表空间的表的话,则有"表名.ibd"文件。只是这个方法很笨,对于生产环境,大量的表经过这种方式判别,确实不是一个好方法。
二、MySQL 5.6 INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES 关于这个系统表提供了有关表格的格式和存储特性,包括行格式,压缩页面大小位级别的信息(如适用),INNODB的表空间信息。
# 共享表空间 SELECT TABLE_SCHEMA ,TABLE_NAME ,TABLE_TYPE ,N'共享表空间' AS TABLE_SPACE ,ENGINE ,VERSION ,TABLE_ROWS ,AVG_ROW_LENGTH ,CREATE_TIME ,UPDATE_TIME FROM INFORMATION_SCHEMA.TABLES T LEFT JOIN INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES I ON CONCAT(T.TABLE_SCHEMA, '/',T.TABLE_NAME)=I.NAME WHERE I.NAME IS NULL AND T.TABLE_SCHEMA='MyDB' AND T.ENGINE='InnoDB'; #独立表空间 SELECT TABLE_SCHEMA ,TABLE_NAME ,TABLE_TYPE ,N'独立表空间' AS TABLE_SPACE ,ENGINE ,VERSION ,TABLE_ROWS ,AVG_ROW_LENGTH ,CREATE_TIME ,UPDATE_TIME FROM INFORMATION_SCHEMA.TABLES T INNER JOIN INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES I ON CONCAT(T.TABLE_SCHEMA, '/',T.TABLE_NAME)=I.NAME WHERE T.TABLE_SCHEMA='MyDB' AND T.ENGINE='InnoDB';
三、若是是MySQL 5.7的话, 比MySQL 5.6有多了一种方法,MySQL 5.7 的INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES中多了SPACE_TYPE字段,不过其值所有为Single,而INFORMATION_SCHEMA.INNODB_SYS_TABLES中也多了字段SPACE_TYPE, 其值有Single与System 分别表示单独表空间和共享表空间。
#独立表空间 SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES WHERE SPACE_TYPE='Single'; #共享表空间 SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES WHERE SPACE_TYPE='System';
四、若是是MySLQ 8.0的话,还多了一种方法, 那就是经过INFORMATION_SCHEMA.INNODB_TABLES来判断,这个新增的系统表能够经过SPACE_TYPE字段来区分共享表空间与独立表空间
SELECT * FROM INFORMATION_SCHEMA.INNODB_TABLES WHERE SPACE_TYPE=’Single’;
使用表空间进行数据存储
innodb_file_per_table ON: 独立表空间: tablename. ibd OFF: 系统表空间:ibdataX
系统表空间和独立表空间要如何选择
比较:
表转移的步骤:
Innodb存储引擎的特性
什么是锁
打个比方: 邮件系统,当两个用户向同一地址发送邮件时,这时候只会有一个用户发送成功,另一个会暂时阻塞,这就是锁也就是事务特性中的隔离性,避免了损坏数据。
锁的类型
锁的粒度
相互之间不存在阻塞,锁的单元越小支持并发越高,好比innodb支持行级锁,这样当须要写入数据时只会对单行操做而不影响其余数据的并行操做,粒度主要就是对操做数据的锁的单元。
阻塞和死锁
Innodb状态检查
show engine innodb status
适用场景
Innodb适合于大多数OLTP应用