• 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()
    
  • 相关阅读:
    POI中文API文档
    接口
    JDK中的URLConnection参数详解
    RPC远程过程调用概念及实现
    tkinter 打包成exe可执行文件
    PHP 的命令行模式
    php CLI SAPI 内置Web Server
    ppython的移位操作
    HAProxy基础
    HAProxy用法详解
  • 原文地址:https://www.cnblogs.com/jia-shu/p/14589812.html
Copyright © 2020-2023  润新知