mysql存储引擎(mysql存储引擎类型有哪些)
本篇文章给大家谈谈mysql存储引擎,以及mysql存储引擎类型有哪些对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
什么是MySQL存储引擎?
MySQL 可能是最著名的 关系数据库管理系统 (RDBMS),作为一款免费开源软件开发,最初由 MYSQL AB 公司提供支持,但现在归 Oracle 所有。
在 MySQL 中,用于表的“存储引擎”决定了数据的处理方式。有几种可用的存储引擎,但最常用的是 InnoDB 和 MyISAM 。
在本文中,我们将了解它们的显着特征以及它们之间的主要区别。
在本教程中,您将学习:
在我们讨论两个主要 MySQL 存储引擎之间的特性和区别之前,先来了解一下什么是存储引擎?
存储引擎,也称为“ 表处理程序 ”,基本上是解释和管理与数据库表的 SQL 查询相关的操作的数据库部分。
在最新版本的 MySQL 中,可以使用“ 可插拔 ”架构来组织和管理存储引擎,存在多种存储引擎,但最常用的两个是 InnoDB 和 MyISAM 。
要获得我们正在使用的数据库中可用存储引擎的列表,我们所要做的就是发出一个简单的 SQL 查询,因此我们需要做的第一件事就是打开一个 MySQL 交互式提示并使用数据库用户登录及其密码:
如果登录成功,提示将变为mysql,在这里,我们可以运行我们的 SQL 查询来可视化可用的存储引擎:
执行查询后,我们应该获得类似于以下内容的结果:
在上表中,作为查询结果生成,我们可以通过查看Support每行列中的值轻松了解支持哪些存储引擎,“YES”值表示存储引擎可用,否则“NO”。相反,同一列中的“DEFAULT”值表示相应的引擎(在本例中为 InnoDB)是服务器使用的默认引擎。
“ Transactions ”和“ Savepoints ”列搏配凳中存在的值分别表示存储引擎是否支持事务和回滚。正如我们通过查看表可以看到的,只有 InnoDB 引擎可以。
关于存储引擎的信息存在于“ INFORMATION_SCHEMA ”数据库的“ ENGINES ”表中,因此我们也可以发出标准的“SELECT”查询来获取我们需要的数据:
我们将获得与上面看到的相基旅同的结果。
让我们看看两个最常用的存储引擎 InnoDB 和 MyISAM 之间的主要特性和区别是什么。
正如我们已经说过的, InnoDB 是自 MySQL 以来的默认存储引擎5.5。
此存储引擎的一些主要功能如下:
对事务的支持提供了一种安全的方式来执行多个查询以保持数据一致。
当多个修改数据的操作被执行并且我们想要确保它们只有在所有操作都成功并且没有错误发生时才有效时,我们想要使用事务。
典型的处理方式是启动事务并执行查询:如果出现错误,则执行回滚,否则提交更改。
当使用 InnoDB 数据锁定发生在行级别时,因此在事务期间锁定的数据量是有限的。
InnoDB 有两种类型的锁:
一个共享锁允许谁拥有它读取该行的交易,而一个排它锁允许交易执行其修改行的操作,所以要更新或删除数据。
当一个事务在某行上获得共享锁,而另一个事务需要相同的锁类型时,立即授予;但是,如果第二个事务在同一行上请求排他锁,它将不得不等待。
如果第一个事务持有该行的排他锁,则第二个事务将不得不等待该锁被释放卖悄以获得共享锁或排他锁。
外键是一个非常重要的特性,因为它们可用于基于表之间的逻辑关系来强制执行数据完整性。想象一下,我们的数据库中有三个表(假设它被称为“testdb”):一个user包含现有用户的job表,一个注册所有可用作业的user_job表,以及一个用于表示用户和用户之间存在的多对多关系的表。作业(一个用户可以有多个作业,多个作业可以与同一个用户关联)。
该user_job表就是所谓的连接表或关联表,因为它的唯一目的是表示用户-工作关联。该表有两列,一个叫user_id和其他job id。表中会存在两个外键约束,强制执行以下规则:user_id列中的值只能引用表id列中的值,列中的user值job_id必须引用表id列中的现有值job.
这将强制执行完整性,因为仅允许现有用户和作业的 ID 存在于关联表中。删除涉及表中一个或多个关联的用户或作业user_job也是不允许的,除非为相应的外键设置了CASCADE DELETE规则。在这种情况下,当删除用户或作业时,它们所涉及的关系也将被删除。
MyISAM 曾经是默认的 MySQL 存储引擎,但已被 InnoDB 取代。使用此引擎时,数据锁定发生在表级别,因此执行操作时锁定的数据更多。
与 InnoDB 不同,MyISAM 不支持事务回滚和提交,因此必须手动执行回滚。MyISAM 和 InnoDB 之间的另一个很大区别是前者不支持外键。MyISAM 更简单,并且在对有限数据集进行读取密集型操作时可能具有优势(有争议)。
在表上使用 MyISAM 时,会设置一个标志,指示该表是否需要修复,例如在突然关闭之后。稍后可以使用适当的工具执行表修复。
如何知道特定表使用了什么存储引擎?我们所要做的就是发出一个简单的查询。
例如,要知道user我们在前面的例子中提到的表使用了什么存储引擎,我们将运行:
注意上面的查询我们使用了G,为了让查询结果垂直显示,优化空间。执行查询后,我们将获得以下结果:
在这种情况下,通过查看“Engine”列中存储的值,我们可以清楚地看到该表使用的是“InnoDB”引擎。获取相同信息的另一种方法是INFORMATION_SCHEMA.TABLES直接查询表:
上面的查询将只返回表使用的引擎:
如果我们稍微更改查询,我们可以获得数据库中所有表名的列表以及它们使用的引擎:
如果我们要为一个表设置一个特定的存储引擎,我们可以在创建时指定它。例如,假设我们正在创建job表,并且出于某种原因我们想要使用 MyISAM 存储引擎。我们将发出以下 SQL 查询:
相反,如果我们想要更改用于已存在表的存储引擎,我们只需要使用ALTERSQL 语句。假设我们要将上一个示例中创建的“job”表所使用的存储引擎更改为 InnoDB;我们会运行:
在本教程中,我们学习了什么是数据库存储引擎,并且我们看到了两个最常用的 MySQL 引擎的主要特性: InnoDB 和 MyISAM 。
我们看到了如何检查哪些引擎可用、哪些引擎用于表以及如何使用 SQL 查询设置和修改表引擎。
Mysql存储引擎之myisam
Myisam存储引擎是在mysql5.5之前版本默认的存储引擎,mysql大部分系统表和临时表(是指排序,慧尘带分组等操作中,在数量超过一定数量后,由查询优化器简历的临时表)都使用这个存储引擎。
myisam存储引擎表会存储两个文件MYD和MYI。
举例说明:先创建一张表
创建表后我们来找到mysql 数据存储文件的位置,我的是windows(C:\ProgramData\MySQL\MySQL Server 5.7\Data\myisam_db)
创建一张myisam存储引擎mysql会创建3个文件。
frm文件是所有存储引擎都会创建的,用来记录表结构。
MYD是来记录存储的数据。
MYI用来记录索引数据。
myisam存储引擎是mysql最早的存储引擎之一,来看一下他的特性。
1.并发性和锁级别
使用表级锁,当对表中数据做修改时,会对整个表的数据进行加锁,在读取数据时候,也需要对表中的数据加共享锁,所以对读写混合的操作并发性并不是太好。如果是只读的时候,并发性还是可以接受的,因为共享锁并不会阻塞共享锁。
2.表的损坏和修复
myisam支持对任意意外关闭所损坏的表的检查和修复,这里的修复并不是通过事物来修复的,因为myisam不支持事物,有可能造成数据的丢失
check table tablename 检查表
repair table tablename 修复表
3.索引类型
myisam表支持全文索引,还支持对text,blob字符前500个字符加前置索引
4.支持数据压缩
支持数据压缩,压缩后的表是只读的,不可以进行修改等操作
命令 myisampack -b -f test.MYI (-f强制压缩)
介绍完他的特性之后,在来看下myisam存储引擎的一些限制。
版本5.0时默认表的兄纯大小最多是4G,在5.0以后的版本默认大小是256T。
如果想存储更多的数据需要修改max_rows和avg_row_length两个参数
使用场景
1.非前芦事物性应用 (不支持事物),适合数据仓库,报表类的应用
2.只读应用 (可以压缩)
3.空间类应用(支持空间函数)
Mysql存储引擎之InnoDB
查看MySQL 支持的存储引擎
查看MySQL 支持的存储引擎有三种语句格式:
格式一:SHOW ENGINES;
格式二:SHOW ENGINES\g
格式三:SHOW ENGINES\G
这三种格式区别仅在于使用的“结液伍束符”不同,这会导致“命令执行结果的显示”不同。其中“\G”的显示效果最好滚备,对大埋毁所支持的各种存储引擎会从“引擎名称”、“是否支持该引擎”、“关于该引擎的说明、评论”、“是不是支持事务”、“该引擎支持的分布式是否支持XA规范”、“是否支持事务处理中的保存点”等方面逐个地、详细地显示出来;使用“;”和“\g”作用相同,仅简单显示各个存储引擎的信息。
[img]关于mysql存储引擎和mysql存储引擎类型有哪些的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。