zoukankan      html  css  js  c++  java
  • 数据库中悲观锁和乐观锁

     

    悲观锁:悲观的觉得别人一定会修改我的数据。悲观锁有两种,读锁和写锁。

     1.读锁:也叫共享锁。共享数据对象上锁权,大家都可以上锁,我上了一把读锁,你也可以上,但是只能上共享锁。可以使自己和别人不能修改数据,只能读取。

    我开启事务

    select * from student    LOCK IN  SHARE MODE

    //把select出来的数据对象锁定

    update student  set age='18'  where name='小强'

     //这里,我要修改小强的年龄age成18岁,是可以修改成功的

    //因为锁是我的,我有钥匙。但是,当下面的小红开启事务,然后锁上数据对象,

    //我就无法对数据进行修改

    //除非锁被释放(不存在锁了)或者只有一个人持有锁,才可以对修改数据

    我关闭事务

    小红开启事务

    select * from student    LOCK IN  SHARE MODE

    //小红把select出来的数据对象锁住了,我没有钥匙是无法开门的,小红也没有我的 //钥匙,现在大家都只能读了

    小红关闭事务

     2.写锁:也叫排他锁:不共享数据对象上锁权,我上了锁,你们就不能上锁。有锁钥匙的事务可以修改,读取。

      开启事务

    SELECT *FROM student FOR UPDATE;

    //现在这个数据对象只有我一个人可以修改,别人不可以加锁,也不能修改数据

    关闭事务

    乐观锁:乐观锁机制避免了长事务中的数据库加锁开销,大大提升了大并发量下的系统整体性能表现。

    通过版本号来控制,数据版本是1,我和小红同时对数据进行修改,在事务提交前,我和小红的程序内部获取的数据版本都是1,所以提交的时候,版本是2.修改后,我先提交,数据版本为2,小红提交时想把数据版本变成2,但是不好意思,只有数据版本只能是3.所以,小红的提交无效。

  • 相关阅读:
    Centos7下安装pip
    Docker进入容器后使用ifconfig等命令“command not found”解决办法
    安装包安装npm
    grafna与饼状图
    Postgresql导出数据报版本不对
    添加动物欢迎语
    zabbix性能优化记
    CPU使用情况之平均负载
    centos7以rpm方法装mysql5.7及大坑
    光速搭lvs + keepalived + nginx
  • 原文地址:https://www.cnblogs.com/shoshana-kong/p/10736945.html
Copyright © 2011-2022 走看看