zoukankan      html  css  js  c++  java
  • 史上最简单MySQL教程详解(进阶篇)之存储引擎介绍及默认引擎设置

    什么是存储引擎?

    与其他数据库例如Oracle 和SQL Server等数据库中只有一种存储引擎不同的是,MySQL有一个被称为“Pluggable Storage Engine Architecture”(可替换存储引擎架构)的特性,也就意味着MySQL数据库提供了多种存储引擎。用户可以根据不同的需求为数据表选择不同的存储引擎,用户也可以根据自己的需要编写自己的存储引擎。MySQL数据库在实际的工作中其实分为了语句分析层和存储引擎层,其中语句分析层就主要负责与客户端完成连接并且事先分析出SQL语句的内容和功能,而存储引擎层则主要负责接收来自语句分析层的分析结果,完成相应的数据输入输出和文件操作。简而言之,就是如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。因为在关系数据库中数据的存储是以表的形式存储的,所以存储引擎也可以称为表类型(即存储和操作此表的类型)。

    MySQL存储引擎种类

    存储引擎 说明
    MyISAM 高速引擎,拥有较高的插入,查询速度,但不支持事务
    InnoDB 5.5版本后MySQL的默认数据库,支持事务和行级锁定,比MyISAM处理速度稍慢
    ISAM MyISAM的前身,MySQL5.0以后不再默认安装
    MRG_MyISAM(MERGE) 将多个表联合成一个表使用,在超大规模数据存储时很有用
    Memory 内存存储引擎,拥有极高的插入,更新和查询效率。但是会占用和数据量成正比的内存空间。只在内存上保存数据,意味着数据可能会丢失
    Falcon 一种新的存储引擎,支持事物处理,传言可能是InnoDB的替代者
    Archive 将数据压缩后进行存储,非常适合存储大量的独立的,作为历史记录的数据,但是只能进行插入和查询操作
    CSV CSV 存储引擎是基于 CSV 格式文件存储数据(应用于跨平台的数据交换)

    接下来我们就介绍两种在实际开发中使用最多的两种引擎【MyISAM】和【InnoDB】。

    MyISAM 引擎

    这种引擎是MySQL最早提供的。这种引擎又可以分为静态MyISAM、动态MyISAM 和压缩MyISAM三种:

    • 静态MyISAM:如果数据表中的各数据列的长度都是预先固定好的,服务器将自动选择这种表类型。因为数据表中每一条记录所占用的空间都是一样的,所以这种表存取和更新的效率非常高。当数据受损时,恢复工作也比较容易做。
    • 动态MyISAM:如果数据表中出现varchar、xxxtext或xxxBLOB字段时,服务器将自动选择这种表类型。相对于静态MyISAM,这种表存储空间比较小,但由于每条记录的长度不一,所以多次修改数据后,数据表中的数据就可能离散的存储在内存中,进而导致执行效率下降。同时,内存中也可能会出现很多碎片。因此,这种类型的表要经常用optimize table 命令或优化工具来进行碎片整理。
    • 压缩MyISAM:以上说到的两种类型的表都可以用myisamchk工具压缩。这种类型的表进一步减小了占用的存储,但是这种表压缩之后不能再被修改。另外,因为是压缩数据,所以这种表在读取的时候要先时行解压缩。

    当然不管是何种MyISAM表,目前它都不支持事务,行级锁和外键约束的功能,这就意味着有事务处理需求的表,不能使用MyISAM存储引擎。MyISAM存储引擎特别适合在以下几种情况下使用:

    • 选择密集型的表。MyISAM存储引擎在筛选大量数据时非常迅速,这是它最突出的优点。
    • 插入密集型的表。MyISAM的并发插入特性允许同时选择和插入数据。

    MyISAM表是独立于操作系统的,这说明可以轻松地将其从Windows服务器移植到Linux服务器;每当我们建立一个MyISAM引擎的表时,就会在本地磁盘上建立三个文件,文件名就是表名。 例如我创建了一个【test】表,那么就会生成以下三个文件:

    文件名 说明
    test.frm 存储表定义
    test.MYD 存储数据
    test.MYI 存储索引

    InnoDB引擎

    InnoDB表类型可以看作是对MyISAM的进一步更新产品,它提供了事务、行级锁机制和外键约束的功能。InnoDB的表需要更多的内存和存储,它会在主内存中建立其专用的缓冲池用于高速缓冲数据和索引。
    使用InnoDB是最理想的选择:

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

    存储引擎操作

    查看存储引擎

    想要查看我们的数据表使用了什么存储引擎,我们就需要使用到我们以前已经介绍过的【show】命令,语法如下:

    SHOW CREATE TABLE 表名;

    例如我们查看我们之前创建好的【user】表:

    SHOW CREATE TABLE user;
    +——-+—————————————————————————————————————————————————————————————————————————-+
    | Table | Create Table |
    +——-+—————————————————————————————————————————————————————————————————————————-+
    | user | CREATE TABLE user (
    userId char(5) CHARACTER SET latin1 NOT NULL,
    name varchar(30) DEFAULT NULL,
    sex char(1) CHARACTER SET latin1 DEFAULT ‘0’,
    PRIMARY KEY (userId)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8 |
    +——-+—————————————————————————————————————————————————————————————————————————-+
    1 row in set (0.02 sec)

    就可以看到【 ENGINE】显示我们使用的引擎为【MyISAM】

    存储引擎的变更

    变更我们存储表的存储引擎将使用到的是我们前面使用过的【ALTER】命令,语法如下:

    ALTER TABLE 表名 ENGINE=新引擎;

    例如,我们将【user】表的引擎更改为【InnoDB】:

    mysql> ALTER TABLE user ENGINE = InnoDB;
    Query OK, 7 rows affected (0.50 sec)
    Records: 7 Duplicates: 0 Warnings: 0
    mysql> SHOW CREATE TABLE user;
    +——-+—————————————————————————————————————————————————————————————————————————-+
    | Table | Create Table |
    +——-+—————————————————————————————————————————————————————————————————————————-+
    | user | CREATE TABLE user (
    userId char(5) CHARACTER SET latin1 NOT NULL,
    name varchar(30) DEFAULT NULL,
    sex char(1) CHARACTER SET latin1 DEFAULT ‘0’,
    PRIMARY KEY (userId)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
    +——-+—————————————————————————————————————————————————————————————————————————-+
    1 row in set (0.00 sec)

    我们就成功的将【user】表的存储引擎改为了【InnoDB】

    修改默认引擎

    要使用事务功能,就必须将表设置为InnoDB引擎,有的版本在安装时,是未激活InnoDB引擎的,所以需要我们手动进行激活。首先我们进入MySQL的安装目录,找到my.ini文件。例如,博主使用的是WampServer的集成开发环境,目录如下:
    这里写图片描述
    我们右键选择记事本打开后,找到【default-storage-engine】这一行,如图:
    这里写图片描述
    将其修改为【default-storage-engine=InnoDB】即可,我们就成功的将默认的引擎修改为【InnoDB】。

    这里,我们就讲解完了关于MySQL数据库存储引擎的有关知识,同时也为我们下一步讲解史上最简单MySQL教程详解(进阶篇)之事务处理做好了铺垫,因为要实现事务管理,需要将表的存储引擎更改为【InnoDB】

  • 相关阅读:
    面向对象的-作用域
    什么时候会有作用域的形成
    面向对象-作用域
    1.3tableView向左滑动出现多个按钮操作
    tableView自带删除与添加操作
    使用偏好设置归档放到哪里
    使用RSA对数据进行加密
    12.22UIAlertController 使用
    在PCH中定制自己的LOG打印日志,分别在DEBUG 与 RELEASE的状态下处理,及如何把PCH引入到项目中
    在程序document文件夹里边创建新的文件夹及删除文件夹
  • 原文地址:https://www.cnblogs.com/newtol/p/10159104.html
Copyright © 2011-2022 走看看