欢迎来到十九分快乐的博客

生死看淡,不服就干。

7.ORM锁和事务

ORM锁和事务

行级锁

在写表的: 增删改语句-搜索引擎innodb自动加行级锁
查询语句加锁(默认不加锁):
models.Book.objects.select_for_update().filter(id=1)
# select * from app01_book where id=1 for update; #sql语句手动加锁 

事务

四大特性:原子性(不可分割),一致性,隔离性,持久性
    原子性(不可分割): 最主要的
        多条sql语句,捆绑到一起执行,要么全部成功,要么全部失败(例如:支付宝转账)
    一致性:
        数据修改前后数据保持一致(支付宝转账,我收100元,你就减100元)
    隔离性:
        两个事务之间执行过程是隔离的,互不影响
    持久性:
        数据改动上传到硬盘上,硬盘上的数据就保存修改后的内容了
特点:
	事务中的sql语句,如果加锁了,事务不提交,锁永不释放;事务提交后,锁才释放
	
mysql中开启事务:
	begin 或者 start transaction
mysql中提交事务: 
	commit
	
事务中加锁:
	自己提取是数据,再我没改完,别人休想在动,保证了数据的一致性;否则,我没改完,就被别人改了,数据就乱了

方式1: 视图函数中加事务

from django.db import transaction

# 视图中的所有orm或者sql语句都捆绑为了一个事务
@transaction.atomic
def viewfunc(request):
    # This code executes inside a transaction.
    do_stuff()

方式2:局部逻辑使用事务

from django.db import transaction

def viewfunc(request):
    # This code executes in autocommit mode (Django's default).
    do_stuff()

    with transaction.atomic(): #给函数中的一部分语句加事务,with里边的代码在事务内执行 
      	models.Book.objects.select_for_update().filter(id=1)
        do_more_stuff()

    do_other_stuff()
posted @ 2021-03-28 20:23  十九分快乐  阅读(71)  评论(0编辑  收藏  举报