在进行后端业务开始操做修改数据库时,可能会涉及到多张表的数据修改,对这些数据的修改应该是一个总体事务,即要么一块儿成功,要么一块儿失败。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语句的执行结果会被撤销。