![](/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.