什麼是事務
不可分割的操作,比如乙個事務要修改 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 事務之間互不影響。事務的隔...