MySQL引擎:InnoDB與MySIAM區別對比,以及事務隔離級別
一,InnoDB與MyISAM的對比:
InnoDB |
MyISAM |
|
事務上 |
InnoDB提供事務支援,是MySQL預設的事務型儲存引擎, 支援事務安全表(ACID), 只要在需要InnoDB不支援的特性時,才考慮是否使用其他的儲存引擎 |
MyISAM不支援事務, |
鎖機制 |
innoDB支援行鎖和外來鍵,並採用MVCC來支援高併發,並且實現4個標準的隔離級別,預設級別是REPEATABLE READ,並且通過間隙鎖(next-key locking)防止幻讀的出現 |
MyISAM不支援行級鎖,支援表級加鎖,讀取時會對需要讀到的所有表加共享鎖,即讀鎖,寫入時會對所有表加排它鎖,即寫鎖(但在表有讀取查詢的同時,也可以往表中插入新的記錄,這被稱為併發插入) |
INSERT,DELETE,UODATE,SELECT |
頻繁修改或是設計到安全性較高的操作時首選InnoDB |
當執行大量的查詢操作時,使用MyISAM效能會比較高 |
2. InnoDB與MyISAM的區別:
(1)InnoDB支援事務
(2)MyISAM適合查詢插入為主的操作,並且執行大量查詢的操作時,效能比較高,InnoDB適合頻繁修改以及設計到安全性較高的操作;
(3)InnoDB支援外來鍵和行鎖(並採用間隙鎖防止幻讀, 某些情況下還是鎖整表,如 update table set a=1 where user like '%lee%'--在where條件沒有使用主鍵時,照樣會鎖全表),MySIAM不支援外來鍵,支援表鎖(讀取時對所有表加共享鎖,寫入時對所有表加排它鎖);
(4)清空整個表時,InnoDB是一行一行的刪除,效率非常慢,MyISAM則會重建表
3.InnoDB與MySIA儲存引擎的選擇
(1)如果一定要使用事務,就需要選擇InnoDB
(2)如果對查詢效能要求較高,可以使用MySIAM
二,MySQL事務篇
- 事務的四個特性;
(1),原子性:整個事務中的所有操作,要麼全部成功執行,要麼全部不完成,然後回滾,不可能停留在中間環節
(2)一致性:資料庫在執行前後都保持一致性狀態,資料庫的完整性約束沒有被破壞;
(3)隔離性:資料庫中的事務之間的操作是不可見的,互不影響的
(4)永續性:資料庫的事務一旦提交,改變將會是永久的,即使資料庫系統崩潰,執行結果也不會發生改變,可以通過資料庫備份和恢復來保持資料庫的永續性
2.MySQL的事務隔離級別;
(1)Read Uncommitted:一個事務讀到了另一個事務未提交的資料.(在該隔離級別會出現髒讀)
(2)Read Commited:一個事務要等另一個事務提交之後才能讀取到資料(在該隔離級別會出現不可重複讀)
(3)Repeatable Read:在開始讀取事務時,不在允許修改操作(在該隔離基本可能會出現幻讀)
(4)Serializable:事務序列化順序執行,可以避免髒讀,不可重複讀,幻讀,但在該事務隔離級別下,效率較低,比較消耗資料庫效能;
3,資料庫隔離級別與髒讀,不可重複讀,幻讀的關係;
隔離級別 |
髒讀 |
不可重複讀 |
幻讀 |
Serializable |
否 |
否 |
否 |
Repeatable Read |
否 |
否 |
是 |
Read Commited |
否 |
是 |
是 |
Read Uncommitted |
是 |
是 |
是 |
- 髒讀: 某個事務讀取的資料是另一個事務正在處理的資料。而另一個事務可能會回滾,造成第一個事務讀取的資料是錯誤的。
- 不可重複讀: 在一個事務裡兩次讀入資料,但另一個事務已經更改了第一個事務涉及到的資料,造成第一個事務讀入舊資料。
- 幻讀: 幻讀是指當事務不是獨立執行時發生的一種現象。例如第一個事務對一個表中的資料進行了修改,這種修改涉及到表中的全部資料行。同時,第二個事務也修改這個表中的資料,這種修改是向表中插入一行新資料。那麼,以後就會發生操作第一個事務的使用者發現表中還有沒有修改的資料行,就好象發生了幻覺一樣。
相關推薦
MySQL引擎:InnoDB與MySIAM區別對比,以及事務隔離級別
一,InnoDB與MyISAM的對比: InnoDB MyISAM 事務上 InnoDB提供事務支援,是MySQL預設的事務型儲存引擎, 支援事務安全表(ACID), 只要在需要InnoDB不支
Mysql中Innodb與Mysiam區別
1).InnoDB不支援FULLTEXT型別的索引。 2).InnoDB 中不儲存表的具體行數,也就是說,執行select count(*) from table時,InnoDB要掃描一遍整個表來計算有多少行,但是MyISAM只要簡單的讀出儲存好的行數即可。注意的是,當co
事務的介紹以及事務隔離級別
什麼是事務 在資料庫操作中,一項事務(Transaction) 是由一條或多條操作資料庫的SQL語句組成的一個不可分割的工作單元。當事務中的所有操作都正常完成時,整個事務才能被提交到資料庫中,如果有一項操作沒有完成,則整個事務會被回滾。 其實事務總結起來理解
oracle,mysql,sql server三大數據庫的事務隔離級別查看方法
glob declare ddr 存在 lag har oca flag ali 1:mysql的事務隔離級別查看方法 mysql 最簡單,執行這條語句就行:select @@tx_isolation 詳情: 1.查看當前會話隔離級別 sel
MySQL中MyISAM與InnoDB的主要區別對比
item sam mysql 5.7 表空間 空間索引 mce table 格式 isa 特征MyISAMInnoDB 聚集索引 否 是 壓縮數據 是(僅當使用壓縮行格式時才支持壓縮MyISAM表。使用壓縮行格式和MyISAM的表是只讀的。) 是 數據緩
MySQL儲存引擎InnoDB與Myisam的六大區別
MySQL有多種儲存引擎,每種儲存引擎有各自的優缺點,可以擇優選擇使用: MyISAM、InnoDB、MERGE、MEMORY(HEAP)、BDB(BerkeleyDB)、EXAMPLE、FEDERATED、ARCHIVE、CSV、BLACKHOLE。 MySQL支援數個
mysql中InnoDB與MyISAM的區別
兩者的區別: 1. InnoDB支援事務,MyISAM不支援,對於InnoDB每一條SQL語言都預設封裝成事務,自動提交,這樣會影響速度,所以最好把多條SQL語言放在begin和commit之間,組成一個事務; 2. InnoDB支援外來鍵,而MyISAM不支援。對一個包含外來鍵的InnoDB錶轉為MYI
mysql儲存引擎innodb、myisam區別
MyISAM與InnoDB的區別是什麼? 1、 儲存結構 MyISAM:每個MyISAM在磁碟上儲存成三個檔案。第一個檔案的名字以表的名字開始,副檔名指出檔案型別。.frm檔案儲存表定義。資料檔案的副檔名為.MYD (MYData)。索引檔案的副檔名是.MYI (MYIndex)。InnoDB:所有的表都
mysql中的兩種引擎 innoDB IsAM 的區別
MyISAM 和 InnoDB 講解 InnoDB和MyISAM是許多人在使用MySQL時最常用的兩個表型別,這兩個表型別各有優劣,視具體應用而定。基本的差別為:MyISAM型別不支援事務處理等高階處理,而InnoDB型別支援。MyISAM型別的表強調的是效能,其執
mysql 儲存引擎 innodb和myisam 區別
轉自:http://blog.sina.com.cn/s/blog_6e322ce70100xwve.html 1, 事務處理 innodb 支援事務功能,myisam 不支援。 Myisam 的執行速度更快,效能更好。 2,select ,update ,insert
Mysql資料庫Innodb與MyISAM的效能對比測試
由於近期有個專案對系統性能要求很高,技術選型上由於種種原因已經確定使用Mysql資料庫,接下來就是要確定到底使用哪種儲存引擎。我們的應用是典型的寫多讀少,寫入內容為也很短,對系統的穩定性要求很高。所以儲存引擎肯定就定在廣泛使用的Innodb和MyISAM之中了。
MySQL中varchar與char區別
MySQL中varchar最大長度是多少? 一. varchar儲存規則: 4.0版本以下,varchar(20),指的是20位元組,如果存放UTF8漢字時,只能存6個(每個漢字3位元組) 5.0版本以上,varchar(20),指的是20字元,無論存放的是數字、字母還是UTF8
馳騁工作流引擎JFlow與activiti的對比之4種高階分支同步模式
多重選擇(Multiple Choice) 在流程中,當一個活動完成後,有多個分支進行選擇,可以選擇執行其中的一個或者N個分支。 例子:比如去世博園玩,在門口檢票後,可以選擇A-E個片區中的N個進行觀光。 ACTIVITI 中的支援情況: 1.JPDL方式不支
馳騁工作流引擎JFlow與activiti的對比之2種結構化模式
1. 任意迴圈(Arbitrary Cycles) ACTIVITI : 某一個或多個活動可以反覆執行。 例子:使用者買了瓶汽水,拿到汽水後,中了一瓶,又去兌換了一瓶汽水,如果又中了,再去兌換一瓶汽水…. JFLOW: 完全是條件判斷,在表單中增加一個稽核元件,就可以把每次校驗的資訊,寫入裡面,
字串處理中sizeof與strlen區別,以及末尾的\0
char *ch = "wonima aisaoziaaa"; int n = sizeof(ch); // 指標長度,對於64平臺來說,值為8 int nn = sizeof(*ch); // 一個字元的長度,值為1 int nnn = strlen(ch); //
列資料庫與行資料庫對比以及應用範圍
要了解列式資料庫的本質,我覺得先從邏輯視角和物理視角來區分一些概念比較好,比如DBMS從邏輯視角來看, 可以分為1)Relative Database Management System2)Non-Relative Database Management System而從物理(儲存的)視角來看,則可以分為:
馳騁工作流引擎JFlow與activiti的對比之3種基於狀態的模式
延遲選擇(Deferred Choice) 流程中某個點可以有多個分支進行選擇。不是基於簡單的資料或者決定就可以很明顯地作出選擇,而是會向系統或者執行環境提供多種可選擇的分支;但是又不同於AND-Split模式,延遲選擇只能選擇一個分支執行,一旦選擇了其中第一個分支,那麼其他分支就會被
馳騁工作流引擎JFlow與activiti的對比之4種包含多例項的模式
無同步的多例項(MIwithout) 在流程中,一個活動可以啟用多個例項,每個例項相互獨立,並不需要在後面進行同步。 例子:比如使用者購買了N本書,於是後續的支付賬單、更新客戶可以以本書為單位各自執行。 ACTIVITI 中的支援情況: 支援這種模式,但是不允許在後面進行結束動
馳騁工作流引擎JFlow與activiti的對比之5種基本控制流模式的對比
前言 為了更好的說明activiti 與jflow的兩款工作流引擎的特點與區別,我們按照如下幾個方面做一次全面的、客觀的對比。 首先activiti是國外的一款開源的工作流程引擎,在國際上影響比較深遠與廣泛,解決了BPM領域的很多
馳騁工作流引擎JFlow與activiti的對比 -總結
共同點: 1. 嵌入式的工作流引擎,降低叢集複雜性。 2. 嚴格而靈活的流程版本控制 3. 支援多種資料庫 4. 支援多種流程設計模式 5. 成熟度高的開源工作流,具有可靠的穩定性和效能。 區別: 1. 流程定義方式: ACTIVITI :採用xml的方式,通過拼字串的方式完成,所以流程定