这个是考虑性能的问题,还有事务的支持,吧 百度一下你就知道
MyISAM、InnoDB、Heap(Memory)、NDB
貌似一般都是使用 InnoDB的,
mysql的存储引擎包括:MyISAM、InnoDB、BDB、MEMORY、MERGE、EXAMPLE、NDBCluster、ARCHIVE、CSV、BLACKHOLE、FEDERATED等,其中InnoDB和BDB提供事务安全表,其他存储引擎都是非事务安全表。
最常使用的2种存储引擎:
1Myisam是Mysql的默认存储引擎,当create创建新表时,未指定新表的存储引擎时,默认使用Myisam。每个MyISAM在磁盘上存储成三个文件。文件名都和表名相同,扩展名分别是frm(存储表定义)、MYD(MYData,存储数据)、MYI(MYIndex,存储索引)。数据文件和索引文件可以放置在不同的目录,平均分布io,获得更快的速度。
2InnoDB存储引擎提供了具有提交、回滚和崩溃恢复能力的事务安全。但是对比Myisam的存储引擎,InnoDB写的处理效率差一些并且会占用更多的磁盘空间以保留数据和索引。
不知道是不是对你有帮助
各类数据库管理系统的设计都有其独特之处。在Oracle上也是有存储引擎的,但Oracle官方从来都不这么提,只说存储架构。按功能上来看,InnoDB在设计之初参考了Oracle的设计(如表空间,extent,块等)。MSSQL
--
不知道。
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 以来的默认存储引擎55。
此存储引擎的一些主要功能如下:
对事务的支持提供了一种安全的方式来执行多个查询以保持数据一致。
当多个修改数据的 *** 作被执行并且我们想要确保它们只有在所有 *** 作都成功并且没有错误发生时才有效时,我们想要使用事务。
典型的处理方式是启动事务并执行查询:如果出现错误,则执行回滚,否则提交更改。
当使用 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_SCHEMATABLES直接查询表:
上面的查询将只返回表使用的引擎:
如果我们稍微更改查询,我们可以获得数据库中所有表名的列表以及它们使用的引擎:
如果我们要为一个表设置一个特定的存储引擎,我们可以在创建时指定它。例如,假设我们正在创建job表,并且出于某种原因我们想要使用 MyISAM 存储引擎。我们将发出以下 SQL 查询:
相反,如果我们想要更改用于已存在表的存储引擎,我们只需要使用ALTERSQL 语句。假设我们要将上一个示例中创建的“job”表所使用的存储引擎更改为 InnoDB;我们会运行:
在本教程中,我们学习了什么是数据库存储引擎,并且我们看到了两个最常用的 MySQL 引擎的主要特性: InnoDB 和 MyISAM 。
我们看到了如何检查哪些引擎可用、哪些引擎用于表以及如何使用 SQL 查询设置和修改表引擎。
数据库好像汽车,引擎就是发动机。
就是将数据存储到磁盘得接口~MySQL有SQL语句分析层和存储引擎层,当分析出SQL语句需要执行什么 *** 作后,调用存储引擎的接口既可。leveldb就可以看成一个存储引擎~个人理解!
MySQL常见的三种存储引擎为InnoDB、MyISAM和MEMORY。其区别体现在事务安全、存储限制、空间使用、内存使用、插入数据的速度和对外键的支持。具体如下:
1、事务安全:
InnoDB支持事务安全,MyISAM和MEMORY两个不支持。
2、存储限制:
InnoDB有64TB的存储限制,MyISAM和MEMORY要是具体情况而定。
3、空间使用:
InnoDB对空间使用程度较高,MyISAM和MEMORY对空间使用程度较低。
4、内存使用:
InnoDB和MEMORY对内存使用程度较高,MyISAM对内存使用程度较低。
5、插入数据的速度:
InnoDB插入数据的速度较低,MyISAM和MEMORY插入数据的速度较高。
6、对外键的支持:
InnoDB对外键支持情况较好,MyISAM和MEMORY两个不支持外键。
参考资料:
BDE(BorlandDatabaseEngine)是Inprise公司的数据库引擎。
这个术语与其他所有缩写相似,因为它也可以代表许多其他东西。
它可以代表的一些其他事情是“初学者司机教育”,“批量数据加密”,“基本数据输入”,“总线驱动器错误”和“基本设计工程”。
以上就是关于mysql数据库的引擎和表引擎的区别全部的内容,包括:mysql数据库的引擎和表引擎的区别、请问MSSQL,ORACLE,数据库引擎是什么、什么是MySQL存储引擎等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)