網站首頁 編程語言 正文
一、事務的四大特性
一般來說,事務是必須滿足4個條件(ACID)::原子性(Atomicity,或稱不可分割性)、一致性(Consistency)、隔離性(Isolation,又稱獨立性)、持久性(Durability)。
- 原子性:一個事務(transaction)中的所有操作,要么全部完成,要么全部不完成,不會結束在中間某個環節。事務在執行過程中發生錯誤,會被回滾(Rollback)到事務開始前的狀態,就像這個事務從來沒有執行過一樣。
- 一致性:在事務開始之前和事務結束以后,數據庫的完整性沒有被破壞。這表示寫入的資料必須完全符合所有的預設規則,這包含資料的精確度、串聯性以及后續數據庫可以自發性地完成預定的工作。
- 隔離性:數據庫允許多個并發事務同時對其數據進行讀寫和修改的能力,隔離性可以防止多個事務并發執行時由于交叉執行而導致數據的不一致。事務隔離分為不同級別,包括讀未提交(Read uncommitted)、讀提交(read committed)、可重復讀(repeatable read)和串行化(Serializable)。
- 持久性:事務處理結束后,對數據的修改就是永久的,即便系統故障也不會丟失。
二、數據庫事務
Django中對于數據庫的事務,默認每執行一句數據庫操作,便會自動提交,我們需要在保存訂單中自己控制數據庫事務的執行流程
2.1使用裝飾器(整體回滾,不處理異常)
調用@transaction.atomic,進行整體回滾
from django.db import transaction
@transaction.atomic
def viewfunc(request):
? ? # 這些代碼會在一個事務中執行
? ? #...
2.2使用with語句(部分回滾,不處理異常)
from django.db import transaction
def viewfunc(request):
? ? # 這部分代碼不在事務中,會被Django自動提交
? ? #...
? ? with transaction.atomic():
? ? ? ? # 這部分代碼會在事務中執行
? ? ? ? #...
注:裝飾器和with語句直接使用會導致異常沒有辦法處理,如果需要處理異常,則可以通過以下的方式進行
2.3使用with語句(部分回滾,可以處理異常)
from django.db import transaction
def viewfunc(request):
? ? # 這部分代碼不在事務中,會被Django自動提交
? ? #...
?? ?try:
? ? ? ? with transaction.atomic():
? ? ? ? ? ? # 這部分代碼會在事務中執行
? ? ? ? ? ? #...
? ? except 異常:
? ? ? ? # 處理異常的代碼
2.4使用保存點(部分回滾,可以處理異常)
需要注意的是要和裝飾器進行配合
from django.db import transaction
@transaction.atomic
def viewfunc(request):
? ? # 這部分代碼不在事務中,會被Django自動提交
? ? #...
?? ?try:
? ? ? ? # 在事務開始前創建保存點
? ? ? ? save_id = transaction.savepoint()
? ? ? ? # 這部分代碼會在事務中執行
? ? ? ? #...
? ? ? ? # 提交從保存點到當前狀態的所有數據庫事務操作
? ? ? ? transaction.savepoint_commit(save_id)
? ? except 異常:
? ? ? ? # 回滾到保存點
? ? ? ? transaction.savepoint_rollback(save_id)
? ? ? ? # 處理異常的代碼
原文鏈接:https://blog.csdn.net/Sunny_Boy0518/article/details/124432161
- 上一篇:沒有了
- 下一篇:沒有了
相關推薦
- 2022-04-08 WPF基本控件介紹_基礎應用
- 2022-09-02 Python+OpenCV實現基本的圖像處理操作_python
- 2022-06-21 Android?studio實現兩個界面間的切換_Android
- 2022-03-28 Python?format字符串格式化函數的使用_python
- 2022-12-13 Android?DataBinding單向數據綁定深入探究_Android
- 2022-07-08 一文詳解C++中運算符的使用_C 語言
- 2023-07-17 uniapp開發,打包成H5部署到服務器
- 2022-11-20 Go項目實現優雅關機與平滑重啟功能_Golang
- 欄目分類
-
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支