通过执行show engines命令查看MySQL中支持哪些存储引擎

MySQL存储引擎属性对比

设置表的存储引擎的方法

在my.cnf配置文件中设置default-storage-engine参数表示设置默认存储引擎在MySQL的连接上设置当前连接的默认存储引擎

mysql> set default_storage_engine=innodb;

创建表的时候通过engine=语句指定该表的存储引擎

CREATE TABLE t1 (i INT) ENGINE = INNODB;

在表创建之后通过alter语句修改表的存储引擎

ALTER TABLE t1 ENGINE = csv;

Innodb 存储引擎

存储引擎InnoDB是目前MySQL版本默认的存储引擎,也是MySQL推荐使用的存储引擎,是集高可靠性和高性能于一身的存储引擎。

在MySQL5.7版本中,除非在配置文件中显视指定default storage engine或者创建表时显视使用engine=语句指定其它的存储引擎,否则默认都是InnoDB

InnoDB存储引擎的优势在于:

DML语句支持事务功能,保证ACID特性行级锁的使用保证了高并发的属性InnoDB对有主键的表会依据主键优化查询性能,也称聚簇索引,将所有数据存储在聚簇索引上以减少对主键查询的IO消耗为保证数据的一致性, InnoDB还支持外键属性,确保有外键约束的表之间不会有不一致的数据当服务器硬件或者软件故障导致MySQL重启后, InnoDB会自动识别已经在故障之前提交的数据,并回退所有故障时未提交的数据,最大限度的保护数据不会丢失(crash recovery)

InnoDB存储引擎的属性

Myisam 存储引擎

MyISAM存储引擎是MySQL老版本的默认存储引擎,由于其表级锁的特性,所以限制了其在读写操作时的性能,常用在只读表上或者读操作占绝大多数的表上,比如一些web应用和数据仓库相关表

每个MyISAM表都会在磁盘上生成三个文件,表名和文件名相同但后缀不同,.frm文件存储表的结构信息,.MYD文件存储表的数据信息,.MYI文件存储表的索引信息

Memory 存储引擎

Memory存储引擎将所有数据存储在内存中以便加快对某些不重要数据的访问速度

此存储引擎的使用范围已经变小,因为InnoDB已经提供了数据缓存区以便对将经常访问的数据缓存在内存中

当MySQL重启时, Memory表中的数据会丢失,但表结构还在Memory只适用在只读表或者读操作占绝大多数的情况,因为对表的写操作也会导致表锁大大限制了并发性

Memory表创建之后,在磁盘文件会生成一个相同表名的文件,后缀为.frm,仅存储表结构而不存储表数据

CSV 存储引擎

Csv存储引擎下的表对应了文本文件,其中的数据用逗号隔开, csv表可用来以csv格式导入和导出表

当创建一个csv表时,磁盘会生成三个以表名为名字的文件, .frm存储表的结构信息而.CSV文件用来存储以逗号隔开的数据信息, .CSM文件用来存储表的元数据,包括表的状态和有多少行数据信息

mysql> create table t(id int not null, name char(10) not null) engine=csv;

Query OK, 0 rows affected (0.00 sec)

mysql> insert into t values (1,'one'),(2,'two');

Query OK, 2 rows affected (0.00 sec)

Records: 2  Duplicates: 0  Warnings: 0

mysql> select * from t;

+----+------+

| id | name |

+----+------+

|  1 | one  |

|  2 | two  |

+----+------+

2 rows in set (0.00 sec)

mysql> system ls /usr/local/mysql/data/test

db.opt  t.CSM  t.CSV  t.frm

mysql> system cat /usr/local/mysql/data/test/t.CSV

1,"one"

2,"two"

ARCHIVE 存储引擎

Archive存储引擎表用来存储大量未加索引的历史归档数据

archive表会在磁盘创建两个文件, .frm文件用来存储表结构信息,.ARZ文件用来存储历史归档数据Archive表支持insert, replace和select语句,但不支持delete和update语句

Archive表支持行级锁Archive支持auto_incrment列,且其列上可以包含一个索引,但在其他字段上不能创建索引

Archive不支持对auto_incrment列插入一个小于当前最大值的数据Archive存储引擎会用zlib来压缩数据

Blackhole 存储引擎

Merge存储引擎可以将一批字段相同,索引相同且顺序相同的MyISAM表在逻辑上看做是同一个

Merge表在磁盘上创建两个文件, .frm文件保存表的结构信息, .MRG文件包含所有被视作同一个表的MyISAM表

Merge表支持select,delete,update,insert语句执行

创建merge表时需要执行union子句,用来将指定的MyISAM结合起来, insert_method选项用来指定插入语句是将数据插入到第一个表FIRST还是最后一个表LAST中,或者不指定或NO表不允许插入

create table t1 (a int not null auto_increment primary key, message char(20)) engine=myisam;

create table t2(a int not null auto_increment primary key , message char(20)) engine=myisam;

insert into t1 (message) values ('testing'),('table'),('t1');

insert into t2 (message) values ('testing'),('table'),('t2');

create table total(a int not null auto_increment, message char(20),index(a)) engine=merge union=(t1,t2) insert_method=last;

select * from total;

mysql> select * from total;

+---+---------+

| a | message |

+---+---------+

| 1 | testing |

| 2 | table  |

| 3 | t1      |

| 1 | testing |

| 2 | table  |

| 3 | t2      |

+---+---------+

6 rows in set (0.00 sec)

Federated 存储引擎

Federated存储引擎提供了从一个MySQL实例连接其它实例上数据的能力Federated存储引擎默认是disable状态,如果要开启,则需要在启动MySQL时使用—federated选项

Example 存储引擎

Example存储引擎只存在于MySQL源码中,只针对开发者,对实际的数据库使用者没有太大的意义Example表只保留表结构,本身不保存数据

NDB 存储引擎

NDB存储引擎专用在MySQL Cluster软件中,是MySQL自己推出的提高可用性和可靠性的集群软件

mysql的存储引擎详解_MySQL常见存储引擎详解相关推荐

  1. Mysql的数据库引擎 区别特点_mysql数据库存储引擎及区别

    MySQL有多种存储引擎,每种存储引擎有各自的优缺点,可以择优选择使用: MyISAM.InnoDB.MERGE.MEMORY(HEAP).BDB(BerkeleyDB).EXAMPLE.FEDERA ...

  2. mysql delete 会锁表吗_MySQL高压缩引擎TokuDB 揭秘

    原文出处:http://mysql.taobao.org/monthly/2017/07/04/ HybridDB for MySQL(原名petadata)是面向在线事务(OLTP)和在线分析(OL ...

  3. mysql 执行计划详解_mysql explain执行计划详解

    备注:转载 1).id列数字越大越先执行,如果说数字一样大,那么就从上往下依次执行,id列为null的就表是这是一个结果集,不需要使用它来进行查询. 2).select_type列常见的有: A:si ...

  4. mysql的聚合函数综合案例_MySQL常用聚合函数详解

    一.AVG AVG(col) 返回指定列的平均值 二.COUNT COUNT(col) 返回指定列中非NULL值的个数 三.MIN/MAX MIN(col):返回指定列的最小值 MAX(col):返回 ...

  5. mysql多表查询详解_MySQL多表查询详解上

    时光在不经意间,总是过得出奇的快.小暑已过,进入中暑,太阳更加热烈的绽放着ta的光芒,...在外面被太阳照顾的人们啊,你们都是勤劳与可爱的人啊.在房子里已各种姿势看我这篇这章的你,既然点了进来,那就由 ...

  6. mysql嵌套查询详解_MySQL嵌套查询实例详解

    本文实例分析了MySQL嵌套查询.分享给大家供大家参考,具体如下: MySQl从4.11版后已经完全支持嵌套查询了,那么下面举些简单的嵌套查询的例子吧(源程序来自MySQL User Manual): ...

  7. mysql对日期做加减_MySQL日期加减函数详解

    MySQL日期加减函数详解2020-06-17 15:25:30 1. addtime() 为日期加上指定秒数select addtime(now(),1); -- 加1秒 2. adddate() ...

  8. mysql 数据类型详解_MySQL笔记之数据类型详解

    字符型数据 字符型数据可以使用定长或变长的字符串来实现,其不同点在于固定长度的字符串使用空格向右填充,以保证占用同样的字节数;变长字符串不需要向右填充,并且所有字节数可变. char          ...

  9. MySQL的表分区详解_MySQL的表分区详解

    一.什么是表分区 通俗地讲表分区是将一大表,根据条件分割成若干个小表.mysql5.1开始支持数据表分区了. 如:某用户表的记录超过了600万条,那么就可以根据入库日期将表分区,也可以根据所在地将表分 ...

最新文章

  1. android gridview固定行数据,如何在Android gridview中为行设置不同的列
  2. siteMap与站点导航
  3. docker mysql镜像连接不上_还在手动安装应用?试一下Docker
  4. radiobutton怎么变成竖排_衣服如此凌乱?怎么能忍受的了?衣柜收纳,试试这些神器吧...
  5. sys.stdout.write与sys.sterr.write(一)
  6. Blackman 窗函数
  7. C++和C#结构体转换的问题
  8. ffmpeg 给视频添加字幕,在视频的某个时间段加入声音特效和动画
  9. (Scrapy框架)爬虫获取新冠疫情数据升级版 | 爬虫案例
  10. 开源掌机芯片方案对比
  11. 申宝股票-三大指数震荡下行
  12. Python学习之字典练习(重复数字统计)
  13. nyoj71 独木舟上的旅行
  14. LTE QPSK 16QAM星座图、调制符号与bit序列映射关系
  15. tf.nn.sigmoid_cross_entropy_with_logits出现负数
  16. 2022年全国职业院校技能大赛(中职组)网络安全竞赛试题A(10)
  17. 在mac上virtualbox上扩容_mac给virtualbox虚拟机硬盘扩容
  18. 1101. 献给阿尔吉侬的花束
  19. HTML5期末大作业:游戏网站——网络游戏官网(悦世界) 6个页面 HTML+CSS+JavaScript ~ ~ 学生HTML个人网页作业作品下载
  20. Java 基本数据类型 - 四类八种

热门文章

  1. Knative Eventing 中 Channel 如何注入默认 Provisioner
  2. 2019阿里云开年Hi购季云通信分会场全攻略!
  3. 配置管理 ACM 在高可用服务 AHAS 流控降级组件中的应用场景
  4. 老代码多=过度耦合=if else?阿里巴巴工程师这样捋直老代码
  5. 在线教育如何应对流量洪峰?阿里云专家:上云+云数据库是最佳路径
  6. IEEE 回应禁止华为系审稿人;WiFi联盟、蓝牙联盟已恢复华为成员资格;中国计算机学会:暂时中止与IEEE通信学会合作……...
  7. Docker精华问答 | task与executor有什么关系?
  8. 综评:5个方面看刚刚发布的Kubernetes 1.12
  9. 约稿——码字能赢得百万人生?不开玩笑
  10. 精讲23种设计模式-基于装饰模式~设计多级缓存框架