儲存引擎
跨引擎事務
在 mysql 命令列的預設設定下,事務都是自動提交的,即執行 sql 語句後就會馬上執行 commit 操作。因此要顯式地開啟乙個事務務須使用命令begin或start transaction,或者執行命令set autocommit=0,用來禁止使用當前會話的自動提交。
用 begin, rollback, commit來實現
begin 開始乙個事務
rollback 事務回滾
commit 事務確認
直接用 set 來改變 mysql 的自動提交模式:
set autocommit=0 禁止自動提交
set autocommit=1 開啟自動提交
innodb引擎提供了對資料庫acid事務的支援,並且實現了sql標準的四種隔離級別。該引擎還提供了行級鎖和外來鍵約束,它的設計目標是處理大容量資料庫系統,它本身其實就是基於mysql後台的完整資料庫系統,mysql執行時innodb會在記憶體中建立緩衝池,用於緩衝資料和索引。但是該引擎不支援fulltext型別的索引,而且它沒有儲存表的行數,當select count(*) from table時需要掃瞄全表。當需要使用資料庫事務時,該引擎當然是首選。由於鎖的粒度更小,寫操作不會鎖定全表,所以在併發較高時,使用innodb引擎會提公升效率。但是使用行級鎖也不是絕對的,如果在執行乙個sql語句時mysql不能確定要掃瞄的範圍,innodb表同樣會鎖全表。
myiasm是mysql預設的引擎,但是它沒有提供對資料庫事務的支援,也不支援行級鎖和外來鍵,因此當insert(插入)或update(更新)資料時即寫操作需要鎖定整個表,效率便會低一些。不過和innodb不同,myiasm中儲存了表的行數,於是select count(*) from table時只需要直接讀取已經儲存好的值而不需要進行全表掃瞄。如果表的讀操作遠遠多於寫操作且不需要資料庫事務的支援,那麼myiasm也是很好的選擇。
主要區別:
1、myiasm是非事務安全的,而innodb是事務安全的
2、myiasm鎖的粒度是表級的,而innodb支援行級鎖
3、myiasm支援全文型別索引,而innodb不支援全文索引
4、myiasm相對簡單,效率上要優於innodb,小型應用可以考慮使用myiasm
5、myiasm表儲存成檔案形式,跨平台使用更加方便
應用場景:
1、myiasm管理非事務表,提供高速儲存和檢索以及全文搜尋能力,如果再應用中執行大量select操作,應該選擇myiasm
2、innodb用於事務處理,具有acid事務支援等特性,如果在應用中執行大量insert和update操作,應該選擇innodb
Mysql資料庫 事務和儲存引擎
總的來說,事務就是是乙個操作序列,這些操作要麼都執行,要麼都不執行,它是乙個不可分割的工作單位。acid,是指在可靠資料庫管理系統 dbms 中,事務 transaction 應該具有的四個特性 原子性 atomicity 一致性 consistency 隔離性 isolation 永續性 dura...
mysql資料庫事務
維基百科 事務是資料庫管理系統 dbms 執行過程中的乙個邏輯單位,由乙個有限的資料庫操作序列構成。只有innodb和ndb 1 原子性 atomicity 事務中的全部操作在資料庫中是不可分割的,要麼全部完成,要麼全部不執行。2 一致性 consistency 幾個並行執行的事務,其執行結果必須與...
MySQL資料庫事務
文章出處 只有innodb引擎支援事務,下邊的內容均以innodb引擎為預設條件 1 髒讀 2 不可重複讀 3 幻讀 1 讀未提交 read uncommitted 可能產生髒讀 不可重複讀 幻讀 2 讀已提交 read committed 避免了髒讀,可能產生不可重複讀 幻讀 3 可重複讀 rep...