MySql 中兩種引擎的區(qū)別
innoDB:1.支持事務(wù)2.適合頻繁修改以及涉及到安全性較高的應(yīng)用適合矾端,InnoDB支持外鍵
MyISAM:1。不支持事務(wù)2.查詢以及插入為主的應(yīng)用涨醋,InnDB不支持
MySql和Oracle區(qū)別
#### 一友题、宏觀上:
1、Oracle是大型的數(shù)據(jù)庫而Mysql是中小型數(shù)據(jù)庫园爷;Mysql是開源的宠蚂,Oracle是收費的,且價格昂貴童社。
2求厕、Oracle支持大并發(fā),大訪問量扰楼,是OLTP的最好的工具呀癣。
3、安裝占用的內(nèi)存也是有差別弦赖,Mysql安裝完成之后占用的內(nèi)存遠遠小于Oracle所占用的內(nèi)存项栏,并且Oracle越用所占內(nèi)存也會變多。
#### 二蹬竖、微觀上:
1沼沈、對于事務(wù)的支持
Mysql對于事務(wù)默認是不支持的流酬,只是有某些存儲引擎中如:innodb可以支持;而Oracle對于事物是完全支持的列另。
2康吵、并發(fā)性
什么是并發(fā)性?并發(fā)性是OLTP(**On-Line Transaction Processing聯(lián)機事務(wù)處理過程**)數(shù)據(jù)庫最重要的特性访递,并發(fā)性涉及到資源的獲取晦嵌、共享與鎖定。
Mysql以表鎖為主拷姿,對資源鎖定的力度很大惭载,如果一個session對一個表加鎖時間過長,會讓其他session無法更新此表的數(shù)據(jù)响巢。
Oracle使用行級鎖描滔,對資源鎖定的力度要小很多,只是鎖定sql需要的資源踪古,并且加鎖是在數(shù)據(jù)庫中的數(shù)據(jù)行上含长,不依賴于索引。所以oracle對并發(fā)性的支持要好很多伏穆。
3拘泞、數(shù)據(jù)的持久性
Oracle保證提交的事務(wù)均可以恢復(fù),因為Oracle把提交的sql操作線寫入了在線聯(lián)機日志文件中枕扫,保存到磁盤上陪腌,如果出現(xiàn)數(shù)據(jù)庫或者主機異常重啟,重啟Oracle可以靠聯(lián)機在線日志恢復(fù)客戶提交的數(shù)據(jù)烟瞧。
Mysql默認提交sql語句诗鸭,但是如果更新過程中出現(xiàn)db或者主機重啟的問題,也可能會丟失數(shù)據(jù)参滴。
4强岸、事務(wù)隔離級別
MySQL是repeatable read的隔離級別,而Oracle是read commited的隔離級別砾赔,同時二者都支持serializable串行化事務(wù)隔離級別蝌箍,可以實現(xiàn)最高級別的。
讀一致性过蹂。每個session提交后其他session才能看到提交的更改十绑。Oracle通過在undo表空間中構(gòu)造多版本數(shù)據(jù)塊來實現(xiàn)讀一致性聚至,每個session 查詢時酷勺,如果對應(yīng)的數(shù)據(jù)塊發(fā)生變化,Oracle會在undo表空間中為這個session構(gòu)造它查詢時的舊的數(shù)據(jù)塊扳躬。
MySQL沒有類似Oracle的構(gòu)造多版本數(shù)據(jù)塊的機制脆诉,只支持read commited的隔離級別甚亭。一個session讀取數(shù)據(jù)時,其他session不能更改數(shù)據(jù)击胜,但可以在表最后插入數(shù)據(jù)亏狰。session更新數(shù)據(jù)時,要加上排它鎖偶摔,其他session無法訪問數(shù)據(jù)
5暇唾、提交方式
Oracle默認不自動提交,需要手動提交辰斋。Mysql默認自動提交策州。
6、邏輯備份
Mysql邏輯備份是要鎖定數(shù)據(jù)宫仗,才能保證備份的數(shù)據(jù)是一致的够挂,影響業(yè)務(wù)正常的DML(數(shù)據(jù)操縱語言Data Manipulation Language)使用;Oracle邏輯備份時不鎖定數(shù)據(jù)藕夫,且備份的數(shù)據(jù)是一致的孽糖。
7、sql語句的靈活性
mysql對sql語句有很多非常實用而方便的擴展毅贮,比如limit功能(分頁)办悟,insert可以一次插入多行數(shù)據(jù);Oracle在這方面感覺更加穩(wěn)重傳統(tǒng)一些滩褥,Oracle的分頁是通過偽列和子查詢完成的誉尖,插入數(shù)據(jù)只能一行行的插入數(shù)據(jù)。
8铸题、數(shù)據(jù)復(fù)制
MySQL:復(fù)制服務(wù)器配置簡單铡恕,但主庫出問題時,叢庫有可能丟失一定的數(shù)據(jù)丢间。且需要手工切換叢庫到主庫探熔。
Oracle:既有推或拉式的傳統(tǒng)數(shù)據(jù)復(fù)制,也有dataguard的雙機或多機容災(zāi)機制烘挫,主庫出現(xiàn)問題是诀艰,可以自動切換備庫到主庫,但配置管理較復(fù)雜饮六。
9其垄、分區(qū)表和分區(qū)索引
MySQL的分區(qū)表還不太成熟穩(wěn)定;Oracle的分區(qū)表和分區(qū)索引功能很成熟卤橄,可以提高用戶訪問db的體驗绿满。
10、售后與費用
Oracle是收費的窟扑,出問題找客服喇颁;Mysql是免費的的漏健,開源的,出問題自己解決橘霎。
11蔫浆、權(quán)限與安全
Oracle的權(quán)限與安全概念比較傳統(tǒng),中規(guī)中矩姐叁;MySQL的用戶與主機有關(guān)瓦盛,感覺沒有什么意義,另外更容易被仿冒主機及ip有可乘之機外潜。
12谭溉、性能診斷方面
Oracle有各種成熟的性能診斷調(diào)優(yōu)工具,能實現(xiàn)很多自動分析橡卤、診斷功能扮念。比如awr、addm碧库、sqltrace柜与、tkproof等 ;MySQL的診斷調(diào)優(yōu)方法較少嵌灰,主要有慢查詢?nèi)罩尽?
Mysql數(shù)據(jù)庫事務(wù)的四大特性(ACID)
事務(wù):把一組密不可分的操作系列集合在一起弄匕,這些操作要么全部執(zhí)行,要么全部不執(zhí)行沽瞭。
1.原子性:事務(wù)是內(nèi)定義的操作是一個整體迁匠,是不可分割的。
2.一致性:同一個事務(wù)驹溃,多次讀取數(shù)據(jù)庫中的同一個數(shù)據(jù)城丧,讀取的內(nèi)容應(yīng)該是一致的,不變的豌鹤。
3.隔離性:不同事務(wù)之間相互獨立亡哄,互不干擾。
4.持久性:事務(wù)提交后布疙,事務(wù)內(nèi)的操作對數(shù)據(jù)庫的修改被永久保存在數(shù)據(jù)庫文件中蚊惯。
事務(wù)的開啟
Mysql的事務(wù)默認為自動提交,每執(zhí)行一條DML語句灵临,Mysql數(shù)據(jù)庫會自動提交一次事務(wù)截型。
將Mysql數(shù)據(jù)庫事務(wù)提交方式修改為手動提交有兩種方式:
1)start transaction (手動開啟一個事務(wù),即關(guān)閉數(shù)據(jù)庫事務(wù)的自動提交儒溉,每次事務(wù)提交后宦焦,事務(wù)自動提交又會自動打開,即每次都需要手動開啟)
2)set autocommit = off;(將當(dāng)前會話的事務(wù)設(shè)置為手動提交赶诊,每次事務(wù)結(jié)束都需要commit或者rollback笼平,下個事務(wù)不需要再次手動開啟)
事務(wù)提交或回滾(TCL語句)事務(wù)控制語句
1)commit
2)rollback