1.事務就是要保證一組資料庫操作,要麼全部成功,要麼全部失敗
2.在 mysql 中,事務支援是在引擎層實現的
3.mysql 是乙個支援多引擎的系統,但並不是所有的引擎都支援事務。比如 mysql 原生的 myisam 引擎就不支援事務,這也是 myisam 被 innodb 取代的重要原因之一。
4.事務, acid(atomicity、consistency、isolation、durability,即原子性、一致性、隔離性、永續性)
5.資料庫常見事務問題:髒讀(dirty read)、不可重複讀(non-repeatable read)、幻讀(phantom read)的問題
6.sql 標準的事務隔離級別包括:讀未提交(read uncommitted)、讀提交(read committed)、可重複讀(repeatable read) 和序列化(serializable )
7.讀未提交是指,乙個事務還沒提交時,它做的變更就能被別的事務看到。
8.讀提交是指,乙個事務提交之後,它做的變更才會被其他事務看到。
9.可重複讀是指,乙個事務執行過程中看到的資料,總是跟這個事務在啟動時看到的資料是一致的。當然在可重複讀隔離級別 下, 未提交變更對其他事務也是不可見的
10.序列化,顧名思義是對於同一行記錄,「寫」會加「寫鎖」,「讀」會加「讀鎖」。當出現讀寫鎖衝突的時候,後訪問的事務必須等前一 個 事務執行完成,才能繼續執行
11.oracle 資料庫的預設隔離級別其實就是「讀提交」
12.mysql配置事務方式,將啟動引數 transaction-isolation 的值設定成 read-committed
13.在 mysql 中,實際上每條記錄在更新的時候都會同時記錄一條回滾操作。記錄上的最新值,通過回滾操作,都可以得到前乙個 狀態的值。
14.同一條記錄在系統中可以存在多個版本,就是資料庫的多版本併發控制(mvcc)。
15.就是當系統裡沒有比這個回滾日誌更早的 read-view 的時候,回滾日誌會被刪除。
16.長事務的弊端:長事務意味著系統裡面會存在很老的事務檢視,回滾記錄都必須保留,這就會導致大量占用儲存空間。
17.在 mysql 5.5 及以前的版本,回滾日誌是跟資料字典一起放在 ibdata 檔案裡的,即使長事務最終提交,回滾段被清理,文 件也不會變小。
18.顯式啟動事務語句, begin 或 start transaction。配套的提交語句是 commit,回滾語句是 rollback。
19.set autocommit=0,這個命令會將這個執行緒的自動提交關掉,直到你主動執行 commit 或 rollback 語句,或者斷開連線。
20.set autocommit=1,,用 begin 顯式啟動的事務,如果執行 commit 則提交事務。如果執行 commit work and chain,則是提交事 務並自動啟動下乙個事務
21.用於查詢持續時間超過 60s 的事務:
select * from information_schema.innodb_trx where time_to_sec(timediff(now(),trx_started))>60
mysql3事務(2) 隔離級別
mysql隔離級別 show variables like iso mysql show variables like tx is variable name value tx isolation repeatable read 1 row in set,1 warning 0.00 sec set...
mysql事務隔離最高 Mysql事務隔離級別
mysql官方文件顯示 innodb中每個隔離級別的詳細描述如下 read uncommitted select語句以非鎖定方式被執行,但是乙個可能更早期版本的記錄會被用到。因此,使用這個隔離級別,比如,讀是不連貫的。著也被稱為 髒讀 dirty read 另外,這個隔離級別象read commit...
事務隔離(3)
保證一組資料庫操作,要麼全部成功,要麼全部失敗。acid特性 當資料庫中有多個事務同時執行的時候,就可能出現髒讀 dirty read 不可重複讀 non repeatable read 幻讀 phantom read 的問題,為了解決這些問題,就有了 隔離級別 的概念。隔離的越嚴實,效率就會越低,...