Siv*_*va 99
InnoDB
并且MYISAM
,是存储引擎MySQL
.
这两个锁定实现不同:InnoDB
锁定表中的特定行,并MyISAM
锁定整个MySQL
表.
您可以在DB中创建表时通过MYISAM
OR 指定类型InnoDB
.
Adr*_*der 38
看一下
InnoDB是MySQL的存储引擎,作为MySQL AB分发的所有当前二进制文件的标准配置.它可以与MySQL一起使用的其他存储引擎的主要增强功能是符合ACID标准的事务支持
MyISAM的是MySQL的关系数据库管理系统版本的默认存储引擎5.5之前的1.它基于较旧的ISAM代码,但有许多有用的扩展. MyISAM的主要缺点是缺乏交易支持. MySQL 5.5及更高版本的版本已切换到InnoDB引擎,以确保参照完整性约束和更高的并发性.
mlu*_*bke 18
它们是存储引擎.
http://dev.mysql.com/doc/refman/5.1/en/storage-engines.html
MyISAM:默认的MySQL存储引擎,也是Web,数据仓库和其他应用程序环境中使用最多的引擎.MyISAM在所有MySQL配置中都受支持,并且是默认存储引擎,除非您已将MySQL配置为默认使用不同的MySQL.
InnoDB:适用于MySQL的事务安全(ACID兼容)存储引擎,具有提交,回滚和崩溃恢复功能,可保护用户数据.InnoDB行级锁定(没有升级到更粗略的粒度锁)和Oracle风格的一致非锁定读取增加了多用户并发性和性能.InnoDB将用户数据存储在聚簇索引中,以减少基于主键的常见查询的I/O. 为了保持数据完整性,InnoDB还支持FOREIGN KEY参照完整性约束.
InnoDB是 MySQL 的事务存储引擎,而MyISAM是非事务存储引擎。换句话说,InnoDB 遵循 ACID 属性来维护数据的完整性,而 MyISAM 不遵循 ACID 属性,因此无法维护数据的完整性。
在 InnoDB(事务)表中,如果需要回滚,可以轻松撤消事务更改。但是当需要回滚事务时,对 MyISAM(非事务性)表所做的更改无法撤消。
例如,您想将钱从您的支票账户转移到储蓄账户。这是由包含 5 个查询的事务完成的。
1 START TRANSACTION;
2 SELECT balance FROM checking WHERE customer_id = 10233276;
3 UPDATE checking SET balance = balance - 200.00 WHERE customer_id = 10233276;
4 UPDATE savings SET balance = balance + 200.00 WHERE customer_id = 10233276;
5 COMMIT;
Run Code Online (Sandbox Code Playgroud)
假设进程在第 4 步崩溃。如果这里使用了 InnoDB 表,回滚将撤消更改,您就可以避免赔钱的风险。从字面上看,表不知道任何崩溃,因为除非成功执行步骤 5,否则更改不会提交到表。
但是在 MyISAM 表的情况下,当调用回滚或发生导致事务失败的崩溃时,无法撤消事务更改。这意味着,如果交易在第 3 步崩溃,将从您的支票账户中扣除资金。但是钱不会被添加到您的储蓄账户中。
示例礼貌: “高性能 MySQL:优化、备份和复制” - Arjen Lentz、Derek J. Balling、Jeremy Zawodny、Peter Zaitsev 和 Vadim Tkachenko 合着的书
我想补充一点,有能力为每个表指定一个特定的存储引擎是MySQL的关键优势之一(除了易于使用和良好的性能,没有调整).对于需要交易的所有操作,只需坚持使用InnoDB即可.但是,在某些情况下不需要事务时,MyISAM可以真正加快速度 - 与InnoDB相比,需要更少的磁盘空间和RAM.
也就是说,InnoDB一直在变得越来越好: