什么是MySQL存储引擎?

MySQL 可能是最著名的关系数据库管理系统 (RDBMS),作为一款免费开源软件开发,最初由 MYSQL AB 公司提供支持,但现在归 Oracle 所有 。
在 MySQL 中,用于表的“存储引擎”决定了数据的处理方式 。有几种可用的存储引擎,但最常用的是 InnoDB 和 MyISAM 。
在本文中,我们将了解它们的显着特征以及它们之间的主要区别 。
在本教程中,您将学习:

  • 什么是存储引擎
  • 如何检查可用的存储引擎
  • MyISAM 和 InnoDB 的主要区别
  • 如何检查表使用的引擎
  • 如何设置和更改表使用的存储引擎
什么是存储引擎?在我们讨论两个主要 MySQL 存储引擎之间的特性和区别之前,先来了解一下什么是存储引擎?
存储引擎,也称为“表处理程序”,基本上是解释和管理与数据库表的 SQL 查询相关的操作的数据库部分 。
在最新版本的 MySQL 中,可以使用“可插拔”架构来组织和管理存储引擎,存在多种存储引擎,但最常用的两个是InnoDB和MyISAM 。
检查可用的存储引擎要获得我们正在使用的数据库中可用存储引擎的列表,我们所要做的就是发出一个简单的 SQL 查询,因此我们需要做的第一件事就是打开一个 MySQL 交互式提示并使用数据库用户登录及其密码:
$ mysql -u <username> -p<password>如果登录成功,提示将变为mysql>,在这里,我们可以运行我们的 SQL 查询来可视化可用的存储引擎:
mysql> SHOW ENGINES;执行查询后,我们应该获得类似于以下内容的结果:
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+| Engine| Support | Comment| Transactions | XA| Savepoints |+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+| FEDERATED| NO| Federated MySQL storage engine| NULL| NULL | NULL|| MEMORY| YES| Hash based, stored in memory, useful for temporary tables| NO| NO| NO|| InnoDB| DEFAULT | Supports transactions, row-level locking, and foreign keys| YES| YES| YES|| PERFORMANCE_SCHEMA | YES| Performance Schema| NO| NO| NO|| MyISAM| YES| MyISAM storage engine| NO| NO| NO|| MRG_MYISAM| YES| Collection of identical MyISAM tables| NO| NO| NO|| BLACKHOLE| YES| /dev/null storage engine (anything you write to it disAppears) | NO| NO| NO|| CSV| YES| CSV storage engine| NO| NO| NO|| ARCHIVE| YES| Archive storage engine| NO| NO| NO|+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+在上表中,作为查询结果生成,我们可以通过查看Support每行列中的值轻松了解支持哪些存储引擎,“YES”值表示存储引擎可用,否则“NO” 。相反,同一列中的“DEFAULT”值表示相应的引擎(在本例中为 InnoDB)是服务器使用的默认引擎 。
“Transactions”和“Savepoints”列中存在的值分别表示存储引擎是否支持事务和回滚 。正如我们通过查看表可以看到的,只有 InnoDB 引擎可以 。
关于存储引擎的信息存在于“INFORMATION_SCHEMA”数据库的“ENGINES”表中,因此我们也可以发出标准的“SELECT”查询来获取我们需要的数据:
mysql> SELECT * FROM INFORMATION_SCHEMA.ENGINES我们将获得与上面看到的相同的结果 。
InnoDB 与 MyISAM让我们看看两个最常用的存储引擎 InnoDB 和 MyISAM 之间的主要特性和区别是什么 。
数据库正如我们已经说过的,InnoDB 是自 MySQL 以来的默认存储引擎5.5 。
此存储引擎的一些主要功能如下:
  • 支持带有提交和回滚的事务
  • 行级锁定
  • 外键支持,具有级联更新和删除
带有回滚和提交的事务对事务的支持提供了一种安全的方式来执行多个查询以保持数据一致 。
当多个修改数据的操作被执行并且我们想要确保它们只有在所有操作都成功并且没有错误发生时才有效时,我们想要使用事务 。
典型的处理方式是启动事务并执行查询:如果出现错误,则执行回滚,否则提交更改 。
行级锁当使用 InnoDB 数据锁定发生在行级别时,因此在事务期间锁定的数据量是有限的 。
InnoDB 有两种类型的锁:
  • 共享锁
  • 排他锁
一个共享锁允许谁拥有它读取该行的交易,而一个排它锁允许交易执行其修改行的操作,所以要更新或删除数据 。


推荐阅读