一、mysql和oracle宏觀上的區別:
1、mysql與oracle都是關系型資料庫,應用于各種平臺,mysql最開始是一個瑞典公司開發的,但后來被sun公司收購,后來sun又被oracle收購,所以現在可以說mysql屬于甲骨文公司了,mysql開源免費的,而oracle則是收費的,并且價格非常高,
- mysql默認埠:3306,默認用戶:root
- oracle默認埠:1521,默認用戶:system
mysql的安裝卸載很簡單,oracle很麻煩,安裝所用的空間差別也是很大的,mysql安裝后差不多一兩百兆,而oracle則有3G左右,且使用的時候oracle占用特別大的記憶體空間和其他機器性能,
- mysql登錄:
mysql -hlocalhost -uroot -p密碼(h:host、u:user、p:password) - oracle登錄:
sqlplus user_name/password@IP:port/instance_name;(其中可以把IP地址,埠號,實體名寫在一個TNS檔案中取一個別名,登陸的時候輸入這個別名就行了)
初學階段,圖形化工具,mysql可以使用Navicat,Oracle一般用PLSQL,也可以用sqlyog等;
- mysql的管理工具較少,在Linux下的管理工具的安裝有時需要安裝額外的包(phpmyadmin,etc),有一定復雜性,
- oracle有多重成熟命令列、圖形界面、web管理工具,還有很多第三方的管理工具,管理極其方便高效,
oracle支持大并發,大訪問量,是OLTP最好的工具,
2、資料庫的層次結構:
- mysql:默認用戶是root,用戶下可以創建好多資料庫,每個資料庫下還有好多表,一般情況下都是使用默認用戶,不會創建多個用戶;
- oracle:創建一個資料庫,資料庫下有好多用戶:sys、system、scott等,不同用戶下有好多表,一般情況下只創建一個資料庫用,
二、操作區別:
1、資料庫中表欄位型別:
- mysql:int、float、double等數值型,varchar、char字符型,date、datetime、time、year、timestamp等日期型,
- oracle:number(數值型),varchar2、varchar、char(字符型),date(日期型)等…
其中char(2)這樣定義,這個單位在oracle中2代表兩個位元組,mysql中代表兩個字符,
其中varchar在mysql中,必須給長度例如varchar(10)不然插入的時候出錯,
2、主鍵:
- mysql一般使用自動增長型別,在創建表時只要指定表的主鍵
auto increment,插入記錄時,不需要再指定該記錄的主鍵值,mysql將自動增長, - oracle沒有自動增長型別,主鍵一般使用的序列,插入記錄時將序列號的下一個值賦給該欄位即可,只是ORM框架是只要是native主鍵生成策略即可,
3、單引號處理:mysql里可以用雙引號包起字串,oracle只可以用單引號包起字串,
4、分頁處理:
- mysql是直接在SQL陳述句中使用
limit就可以實作分頁 - oracle則是需要用到偽劣ROWNUM和嵌套查詢
5、對事務提交:
- mysql默認是自動提交,可以修改為手動提交
- oracle默認不自動提交,需要手動提交,需要在寫
commit指令或點擊commit按鈕,
6、對事務的支持:mysql在innodb存盤引擎的夯機所的情況下才支持事務,而oracle則完全支持事務,
7、事務隔離級別:
- mysql是read commited的隔離級別,而oracle是repeatable read的隔離級別;
- 同時二者都支持serializable串行化事務隔離級別,可以實作最高級別的讀一致性,每個session提交后其它session才能看到提交的更改;
- oracle通過在undo表空間中構造多版本資料塊來實作讀一致性,每個session查詢時,如果對應的資料塊發生變化,oracle會在undo空間中為這個session構造它查詢時的舊的資料塊;
- mysql沒有類似oracle的構造多版本資料的機制,只支持read commited的隔離級別,一個session讀取資料時,其他session不能更改資料,但可以在表最后插入資料;session更新資料時,要加上排它鎖,其他session無法訪問資料,
8、并發性:
- mysql以表級鎖為主,對資源鎖定的粒度很大,如果一個session對一個表加鎖時間過長,會讓其他session無法更新此表中的資料,雖然Innodb引擎表可以用行級鎖,但這個行級鎖的機制依賴于表的索引,如果表沒有索引,或者sql陳述句沒有使用索引,那么仍然使用表級鎖;
- oracle使用行級鎖,對資源鎖定的粒度要小很多,只是鎖定sql需要的資源,并且加鎖是在資料庫中的資料行上,不依賴于索引,所以oracle對并發性的支持要好很多,
9、邏輯備份:mysql邏輯備份時要鎖定資料,才能保證備份的資料是一致的,影響業務正常的dml使用,oracle邏輯備份時不鎖定資料,且備份的資料是一致的,
10、復制:
- mysql:復制服務器配置很簡單,但主庫出問題時,從庫可能丟失一定的資料,且需要手工切換從庫到主庫;
- oracle:既有堆或拉式的傳統資料復制,也有dataguard的雙機或多機容災機制,主庫出問題時,可以自動切換備庫到主庫,但配置管理較復雜,
11、性能診斷:
- mysql的診斷調優方法較少,主要有慢查詢日志;
- oracle有各種成熟的性能診斷調優工具,能實作很多自動分析、診斷功能,比如awr、addm、sqltrace、tkproof等,
12、保存資料的持久性:
- mysql默認提交sql陳述句,但如果更新程序中出現db或主機重啟的問題,也許會丟失資料;
- oracle把提交的sql操作先寫入了在線聯機日志檔案中,保持到了硬碟上,可以隨時恢復,
13、熱備份:
- oracle有成熟的熱備份工具rman,不影響用戶使用資料庫,即使備份的資料庫不一致,也可以在恢復時通過歸檔日志和聯機重做日志進行一致的回復,
- mysql:
- myisam引擎:用mysql自帶的mysqlhostcopy熱備時,需要給表加讀鎖,影響dml操作;
- innodb引擎:它會備份innodb的表和索引,但是不會備份
.frm檔案,用ibbackup備份時,會有一個日志檔案記錄備份期間的資料變化,因此可以不用鎖表,不影響其它用戶使用資料庫,但此工具是收費的, - innobackup是結合ibbackup使用的一個腳本,它會協助對
.frm檔案的備份,
13、日期轉換:
- mysql中日期轉換用
dateformat()函式; - oracle用
to_date()與to_char()兩個函式,
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/105574.html
標籤:其他
上一篇:求助一個查詢
