![](/img/trans.png)
[英]Why mysql "ENGINE=InnoDB" doesn't work with joomla 3 installation
[英]Why in Joomla 3.0.1 installation sql script ENGINE=InnoDB is used?
请有人在Joomla解释原因! 3.0.1安装用于MySQL的sql脚本是使用ENGINE = InnoDB !?! 有什么特别的原因!??!?
MySQL数据库的两种主要类型的表存储引擎是InnoDB和MyISAM。 总结一下功能和性能的差异,
InnoDB较新,而MyISAM较旧。
InnoDB更复杂,而MyISAM更简单。
InnoDB在数据完整性方面更加严格,而MyISAM则是松散的。
当MyISAM实现表级锁时,InnoDB实现了用于插入和更新的行级锁。
InnoDB有交易,而MyISAM没有。
InnoDB有外键和关系约束,而MyISAM没有。
InnoDB具有更好的崩溃恢复能力,而MyISAM在恢复系统崩溃时的数据完整性方面表现不佳。
MyISAM有全文搜索索引,而InnoDB没有。
鉴于这些差异,InnoDB和MyISAM各有其优点和缺点。 它们在某些情况下比在另一种情况下更适合。
InnoDB的优点
InnoDB应该用于数据完整性优先的地方,因为它通过关系约束和事务的帮助固有地处理它们。
写入密集型(插入,更新)表更快,因为它使用行级锁定,只保留对正在插入或更新的同一行的更改。
InnoDB的缺点
由于InnoDB必须处理表之间的不同关系,因此数据库管理员和方案创建者必须花费更多时间来设计比MyISAM更复杂的数据模型。
消耗更多的系统资源,如RAM。 事实上,许多人都建议,如果在安装MySQL之后没有实际需要,可以关闭InnoDB引擎。
没有全文索引。
MyISAM的优点
设计和创建更简单,因此对初学者更好。 不用担心表之间的外来关系。
由于结构更简单,整体上比InnoDB更快,因此服务器资源的成本更低。
全文索引。
特别适合读取密集型(选择)表。
MyISAM的缺点
没有数据完整性(例如关系约束)检查,这就是数据库管理员和应用程序开发人员的责任和开销。
不支持在关键数据应用程序(如银行业务)中必不可少的事务。
对于经常插入或更新的表,InnoDB比InnoDB慢,因为整个表都被锁定以进行任何插入或更新。
比较非常简单。
InnoDB更适合需要频繁插入和更新的数据关键情况。
另一方面,MyISAM在不完全依赖于数据完整性的应用程序中表现更好,而且大多只是选择和显示数据。
考虑到他们没有使用任何外键约束,这实际上是一个非常好的问题。
由于他们自己没有使用外部约束,因此我想到了为什么他们可能会使用InnoDB而不是MyISAM的几个原因:
他们有一些未来计划在某个时间点严格控制数据完整性。
他们希望允许为Joomla编写扩展的人引用现有数据并制定硬约束,如果这是创建者所希望的。 IE:让我们想象一个为Joomla系统中的用户存储笔记的组件。 然后,作者可以创建一个如下表格:
CREATE TABLE IF NOT EXISTS `#__notes` ( `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, `note` VARCHAR(255) NOT NULL, `owner` INT(11) NOT NULL, PRIMARY KEY (`id`), INDEX (`owner`), CONSTRAINT FOREIGN KEY (`owner`) REFERENCES `#__users` (`id`) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
然后作者可以确定笔记的所有者实际存在,并且如果用户从系统中删除,他将不会有任何垃圾剩余,因为属于特定用户的所有笔记也将被删除关于删除操作的CASCADE,如果您不想手动维护干净的数据库,这是非常方便的,如果您想要引用的数据库使用不同的引擎,即MyISAM,这是不可能的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.