• mysql锁


    丢失更新,脏读,不可重复读,幻读;
    丢失更新是指:事务A和事务B中,假设事务A做了一个更新,并提交了,但是事务B并没有察觉到事务A所做的事情,所以事务B还是照常执行,于是乎,事务B丢失了更新;
     
     
    如何避免这个问题呢?
    我们可以通过乐观锁来解决这个问题,事务A在进行更新操作之前,可以先进行查询判断,select table set amout = 1100 where id = xxx and amount = 1000;加上一个金额的判断,如果更改之前数据没有修改则执行成功;否则执行失败回滚;
    在这里我们顺便说说乐观锁和悲观锁的概念和区别;
        悲观锁:顾名思义,就是很悲观,每次去拿数据都认为数据已经被修改了,所以每次都会上锁,悲观锁一般用于冲突率比较高的时候,
        乐观锁:就是 很乐观,认为别人是不会修改的,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,如果更新了,就回滚数据,乐观锁用户写比较少,读比较多的情况,这样冲图很少发生,减少上锁的开销;而悲观锁用在冲突率比较高的情况下,保证了数据库的安全,如果加了乐观锁,不断地回滚,反而降低了性能;
        我们在使用乐观锁的时候,会使用版本锁定,带上更新钱的状态等方式来实现;
        额。。。好了我们继续讲这个读的问题。。。刚才跑题了都。。。。
    脏读:
        脏读跟前面的相反,就是在事务A和事务B之间,事务A执行了操作,而事务B查询到了你这种操作,但是,这个时候,事务A又回滚了,这个蛋疼的操作,于是,真正的数据其实是没变的,而事务B查询到的其实是脏的数据;
     
    幻读:出现了幻觉;就是事务A查询到没有数据,而这个时候事务B更新了数据,而当事务A插入数据的时候就发现,冲突了,这个时候就是说,明明我事务A查询到没有数据,插入数据的时候却发现数据冲突,就像出现了幻觉一样;这就是幻读;
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    呕心沥血写的python猜数字
    判断Python输入是否为数字
    python深拷贝和浅拷贝
    python 字符串
    python字符串操作
    如何在CentOS 7.1中安装VMware Workstation
    Ubuntu强制卸载VMware-player
    linux下安装VMware出错:Gtk-Message: Failed to load module "canberra-gtk-module"解决方法
    day63 Pyhton 框架Django 06
    day62 Pyhton 框架Django 05
  • 原文地址:https://www.cnblogs.com/zxx123/p/8874111.html
Copyright © 2020-2023  润新知