mysql 事務 數量 Mysql 事務

2021-10-19 17:09:15 字數 1438 閱讀 5212

什麼是事務

不可分割的操作,比如乙個事務要修改 a 表和刪除 b 表的資料兩個操作,這兩個操作都成功,這個事務才 commit,不然 rollback

每條 sql 語句都是乙個事務

只對 dml 生效

caid

一致性(consistency):讓資料保持一定程度的合理性,比如使用者加入購物車,購物車數量 +1,庫存就 -1

原子性(atommicity):事務所包含的操作要麼全部成功,要麼全部失敗

隔離性(isolation):事務與事務之間的隔離,比如乙個事務在操作 id 是 1001 的資料,要等這個事務結束了別的事務才能操作這條資料,這種機制是 mysql 預設的,

可以修改,下面會說

永續性(durability):事務一旦提交,就不能再更改了(再發起乙個事務能運算元據,但是和之前的事務是沒關係的)

使用事務

開啟事務:begin transaction 或 start transaction;

回滾事務:rollback;

提交事務:commit;

注:mysql 預設開啟事務

事務併發問題

髒讀:獲取了未提交資料

產生場景:a 事務更新了資料,還未提交,此時 b 事務獲取了更新的資料,然後 a 事務回滾了,導致 b 事務獲取的資料不準確

解決辦法:事務隔離級別設定成 red committed

不可重複讀:

乙個事務兩次查詢的結果不一樣(針對資料,是資料不一樣,因 update 引發)

解決辦法:事務隔離級別設定成 repeatable read

幻讀:乙個事務兩次相同條件查詢的結果集行數不一致(針對總條數,因 insert 或 delete 引發)

解決辦法:事務隔離級別設定成 serializable

事務的隔離級別

讀未提交(read uncommitted):乙個事務可以讀取別的事務未提交的資料

讀提交(red committed):乙個事務必須等別的事務提交才能讀取

可重複讀(repeatable read):mysql 預設事務隔離級別

序列化(serializable):最安全,但是效率低下,比較耗資料庫效能,一般不使用

檢視事務的隔離級別

select @@global.tx_isolation,@@tx_isolation;

設定事務的隔離級別

set global transaction isolation level repeatable read;

隔離級別和併發問題對應關係

事務隔離級別

髒讀可重複讀

幻讀讀未提交(read uncommitted)是是

是讀提交(red committed)否是

是可重複讀(repeatable read)否否

是序列化(serializable)否否

mysql sql 事務寫作 mysql中的事務

事務 事務是一組原子性sql查詢語句,被當作乙個工作單元。若mysql對改事務單元內的所有sql語句都正常的執行完,則事務操作視為成功,所有的sql語句才對資料生效,若sql中任意不能執行或出錯則事務操作失敗,所有對資料的操作則無效 通過回滾恢復資料 事務有四個屬性 原子性 事務被認為不可分的乙個工...

mysql 設定唯讀事務 Spring 唯讀事務

transactional readonly true 這東西不叫唯讀事務,它只是建立了乙個唯讀的資料庫連線。transactional裡面還有個引數,叫isolation這個才是控制隔離級別的。spring提供了5種事務隔離級別予以解決 1 default預設級別 default為資料來源 資料庫...

mysql事務機制 Mysql事務機制

mysql事務是指將資料庫從一種一致性狀態轉到另一種一致性狀態 mysql事務具有acid特性 原子性 atomicity 事務中的所有操作,要麼全部執行,要麼都不執行 一致性 consistency 事務開始和結束後,資料庫的完整性不會被破壞 隔離性 isolation 事務之間互不影響。事務的隔...