Mysql數據庫事務:
在進行后端業務開始操作修改數據庫時,可能會涉及到多張表的數據修改,對這些數據的修改應該是一個整體事務,即要么一起成功,要么一起失敗。
Django中對於數據庫的事務,默認每執行一句數據庫操作,便會自動提交。我們需要在保存數據庫操作中自己控制數據庫事務的執行流程。
在Django中可以通過django.db.transaction模塊提供的atomic來定義一個事務,atomic提供兩種用法:
- 裝飾器用法
from django.db import transaction @transaction.atomic def viewfunc(request): # 這些代碼會在一個事務中執行
...
- with語句用法
from django.db import transaction def viewfunc(request): # 這部分代碼不在事務中,會被Django自動提交
... with transaction.atomic(): # 這部分代碼會在事務中執行
...
在Django中,還提供了保存點的支持,可以在事務中創建保存點來記錄數據的特定狀態,數據庫出現錯誤時,可以恢復到數據保存點的狀態
from django.db import transaction # 創建保存點
save_id = transaction.savepoint() # 回滾到保存點
transaction.savepoint_rollback(save_id)
補充:
mysql事務:一組mysql語句,放在同一事務中,要么都成功,要么都失敗。
1)mysql事務基本操作:
begin或start transaction:手動開啟一個mysql事務。
commit: 事務提交,讓事務中sql語句的執行結果永久有效。
rollback: 事務回滾,撤銷事務中sql語句的執行結果。
2)mysql事務的保存點:
在mysql事務中,可以設置事務保存點,在進行事務語句回滾時可以只回滾到某個保存點。
savepoint `保存點名稱`: 設置mysql事務保存點。
rollback to `保存點名稱`: 回滾事務語句到保存點的位置,保存點之后sql語句的執行結果會被撤銷。
