經常會有一些朋友咨詢關于數據庫的問題,根據大家咨詢的問題,發現一個很有意思的現象,凡是數據關于的問題,基本上都是Oracle類的,MySQL類的問題。尤其是Oracle和MySQL數據庫有哪些區別?其實關于Oracle和MySQL數據庫的區別實在是太多了,比如從大小上:Oracle是一個大型數據庫,而mysql是一個中小型數據庫。Oracle支持大量并發和大量訪問,并且是OLTP的最佳工具。 安裝所用的空間也有很大的不同,安裝后mysql只有152M,而Oracle約為3G,使用時Oracle占用特別大的內存空間和其他機器性能。
Oracle和MySQL數據庫有哪些區別?
除此之外,Oracle和MySQL數據庫還有以下區別:
1、并發性
并發性是oltp數據庫最重要的特性,但并發涉及到資源的獲取、共享與鎖定。
Mysql:以表級鎖為主,對資源鎖定的粒度很大,如果一個session對一個表加鎖時間過長,會讓其他session無法更新此表中的數據。
雖然InnoDB引擎的表可以用行級鎖,但這個行級鎖的機制依賴于表的索引,如果表沒有索引,或者sql語句沒有使用索引,那么仍然使用表級鎖。
Oracle:使用行級鎖,對資源鎖定的粒度要小很多,只是鎖定sql需要的資源,并且加鎖是在數據庫中的數據行上,不依賴與索引。所以oracle對并發性的支持要好很多。
2、一致性
Oracle:支持serializable的隔離級別,可以實現最高級別的讀一致性。每個session提交后其他session才能看到提交的更改。oracle通過在undo表空間中構造多版本數據塊來實現讀一致性,
每個session查詢時,如果對應的數據塊發生變化,oracle會在undo表空間中為這個session構造它查詢時的舊的數據塊。
Mysql:沒有類似oracle的構造多版本數據塊的機制,只支持read commited的隔離級別。一個session讀取數據時,其他session不能更改數據,但可以在表最后插入數據。
session更新數據時,要加上排它鎖,其他session無法訪問數據。
3、事務
Oracle:很早就完全支持事務。
Mysql:在innodb存儲引擎的行級鎖的情況下才支持事務。
4、數據持久性
Oracle:保證提交的數據均可恢復,因為oracle把提交的sql操作線寫入了在線聯機日志文件中,保持到了磁盤上,如果出現數據庫或主機異常重啟,重啟后oracle可以考聯機在線日志恢復客戶提交的數據。
Mysql:默認提交sql語句,但如果更新過程中出現db或主機重啟的問題,也許會丟失數據。
5、提交方式
Oracle:默認不自動提交,需要用戶手動提交。
Mysql:默認是自動提交。
6、邏輯備份
oracle:邏輯備份時不鎖定數據,且備份的數據是一致的。
Mysql:邏輯備份時要鎖定數據,才能保證備份的數據是一致的,影響業務正常的dml使用。
以上就是關于Oracle和MySQL數據庫有哪些區別的內容介紹,其實關于Oracle和MySQL數據庫的區別還有很多,想了解更多關于數據庫的信息,請繼續關注中培偉業。