mysql資料庫事務

2021-10-24 17:13:19 字數 1397 閱讀 4572

原子性:乙個事務(transaction)中的所有操作,要麼全部完成,要麼全部不完成,不會結束在中間某個環節

一致性:在事務開始之前和事務結束以後,資料庫的完整性沒有被破壞

隔離性:資料庫允許多個併發事務同時對其資料進行讀寫和修改的能力,隔離性可以防止多個事務併發執行時由於交叉執行而導致資料的不一致

永續性:事務處理結束後,對資料的修改就是永久的,即便系統故障也不會丟失

在 mysql 命令列的預設設定下,事務都是自動提交的,即執行 sql 語句後就會馬上執行 commit 操作

執行命令set autocommit=0關閉自動提交事務,用來禁止使用當前會話的自動提交。意味著如果你只執行乙個 select 語句,這個事務就啟動了,而且並不會自動提交。這個事務持續存在直到你主動執行 commit 或 rollback 語句,或者斷開連線

set autocommit=1 開啟自動提交事務

髒讀(dirty read)、不可重複讀(non-repeatable read)、幻讀(phantom read)

髒讀:事務a讀取了事務b未提交的資料,事務b的回滾,導致了事務a的資料不一致,導致了事務a的髒讀

不可重複讀:乙個事務在自己沒有更新資料庫資料的情況,同乙個查詢操作執行兩次或多次的結果應該是一致的;如果不一致,就說明為不可重複讀

幻讀:事務a讀的時候讀出了15條記錄,事務b在事務a執行的過程中 增加 了1條,事務a再讀的時候就變成了 16 條,這種情況就叫做幻影讀

需要注意的是:

讀未提交(read uncommitted):允許髒讀取,但不允許更新丟失。如果乙個事務已經開始寫資料,則另外乙個資料則不允許同時進行寫操作,但允許其他事務讀此行資料。該隔離級別可以通過「排他寫鎖」實現(乙個事物讀取到了另外乙個事物已經提交的事物)

讀已提交(read committed):允許不可重複讀取,但不允許髒讀取。這可以通過「瞬間共享讀鎖」和「排他寫鎖」實現。讀取資料的事務允許其他事務繼續訪問該行資料,但是未提交的寫事務將會禁止其他事務訪問該行(乙個事物讀取到了另外乙個事物已經提交的事物)

可重複讀(repeatable read):禁止不可重複讀取和髒讀取,但是有時可能出現幻影資料。這可以通過「共享讀鎖」和「排他寫鎖」實現。讀取資料的事務將會禁止寫事務(但允許讀事務),寫事務則禁止任何其他事務(乙個事務只能重複的讀取當前事務的運算元據,不能讀取到別的事務未提交和已提交的資料)

序列化(serializable):提供嚴格的事務隔離。它要求事務序列化執行,事務只能乙個接著乙個地執行,但不能併發執行。如果僅僅通過「行級鎖」是無法實現事務序列化的,必須通過其他機制保證新插入的資料不會被剛執行查詢操作的事務訪問到

mysql資料庫事務

維基百科 事務是資料庫管理系統 dbms 執行過程中的乙個邏輯單位,由乙個有限的資料庫操作序列構成。只有innodb和ndb 1 原子性 atomicity 事務中的全部操作在資料庫中是不可分割的,要麼全部完成,要麼全部不執行。2 一致性 consistency 幾個並行執行的事務,其執行結果必須與...

MySQL資料庫事務

文章出處 只有innodb引擎支援事務,下邊的內容均以innodb引擎為預設條件 1 髒讀 2 不可重複讀 3 幻讀 1 讀未提交 read uncommitted 可能產生髒讀 不可重複讀 幻讀 2 讀已提交 read committed 避免了髒讀,可能產生不可重複讀 幻讀 3 可重複讀 rep...

Mysql資料庫事務 備忘

一.設定mysql的事務級別 1 my.ini檔案中 read uncommitted,read committed,repeatable read,serializable transaction isolation read committed 2 啟動引數指定 mysqld transacti...