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