mysql中的事務和鎖 MySQL中的事務和鎖

2021-10-19 18:56:39 字數 1676 閱讀 5930

行級鎖select_for_update(nowaitfalse,skip_false) #注意必須用在事物裡面

所有匹配的行將被鎖定,知道事務結束。這意味著可以通過鎖防止資料被其他事務修改。

一般情況下如果其他事務鎖定了相關行,那麼本查詢將被阻塞,直到鎖被釋放。

事務事務的四大特性

1.原子性:事務包含的所有操作要麼全部成功,要麼全部失敗;成功必須要完全應用到資料庫,失敗則不能對資料庫產生影響

2.一致性:事務執行前和執行後必須處於一致型狀態

例:使用者a和使用者b的積分加起來一共5000;無論ab使用者之間是如何轉換的,事務結束後兩個使用者的積分加起來還是5000,這就是事務的一致性

3.隔離性:當多個使用者併發訪問資料庫時,資料庫為每乙個使用者開啟事務,不被其他事務的操作所干擾,多個併發之間要相互隔離

4.永續性:乙個事務一旦被提交,那麼資料庫中的資料的改變就是永久性的,即便在資料庫系統遇到故障的情況下也不會丟失事務的操作

1.全域性開啟

在web應用中,常用的事務處理方式是將每個請求都包裹在乙個事務中。這個功能使用起來非常簡單,你只需要將它的配置項atomic_requests設定為true。

它是這樣工作的:當有請求過來時。django會在呼叫檢視方法前開啟乙個事務。如果請求卻正確處理並正確返回了結果,django會提交該事務。否則,django會回滾該事務

databases ="atomic_requests": true, #全域性開啟事務,繫結的是http請求響應整個過程

"autocommit":false, #全域性取消自動提交,慎用

},'other':#還可以配置其他資料庫

上面這種方式是同乙個http請求對應的所有sql都放在乙個事務中執行(要麼所有都成功,要麼所有都失敗)。是全域性性的配置,如果要對某乙個http請求防水(然後自定義事務),可以用non_atomic_requests裝飾器,那麼他就不受事務的管控了

from django.db importtransaction

@transaction.non_atomic_requestsdefmy_view(request):

do_stuff()

@transaction.non_atomic_requests(using='other')defmy_other_view(request):

do_stuff_on_the_other_database()

2.區域性事務

用法1:給函式做裝飾器來使用

from django.db importtransaction

@transaction.atomicdefviewfunc(request):#this code executes inside a transaction.

do_stuff()

用法2:作為上下文管理器來使用,其實就是設定事務的儲存點

from django.db importtransactiondefviewfunc(request):#this code executes in autocommit mode (django's default).

do_stuff()

with transaction.atomic():#儲存點

#this code executes inside a transaction.

do_more_stuff()

do_other_stuff()

mysql 事務和鎖

事務是dbms得執行單位 開啟事務 set autocommit 0 取消自動提交 或begin 手動開啟乙個事務 提交乙個事務 commit 回滾乙個事務 rollback 在mysql的innodb 引擎中,預設每個操作 insert,update,select for update lock ...

MySQL 事務和鎖

和其他資料庫相比,mysql的鎖機制比較假單,不同的引擎支援不同的鎖機制。myisam和memory使用表級鎖,bdb使用頁面鎖和表級鎖 innodb預設支援行級鎖,也支援表級鎖。myisam表鎖有兩中,乙個是都鎖,乙個是寫鎖,相容性如下 模式讀鎖 寫鎖讀鎖 相容不相容 寫鎖不相容 不相容 可見my...

Mysql 事務和鎖

是指作為單個邏輯工作單元執行的一系列操作,要麼完全地執行,要麼完全地不執行。事務處理可以確保除非事務性單元內的所有操作都成功完成,否則不會永久更新面向資料的資源。通過將一組相關操作組合為乙個要麼全部成功要麼全部失敗的單元,可以簡化錯誤恢復並使應用程式更加可靠。乙個邏輯工作單元要成為事務,必須滿足所謂...