• 数据库中悲观锁和乐观锁


     

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

     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.所以,小红的提交无效。

  • 相关阅读:
    C语言程序设计 第二章 数据类型
    C语言程序设计 认识函数
    趣味c语言编程100例(三)
    如何使用 Eset Nod32通行证批量获取精灵
    C语言程序设计 使用库函数参考手册
    C语言程序设计 概述
    C语言程序设计 VC6调试程序(视频)
    趣味c语言编程100例(四)
    java WebService 异常
    数据库战略高度解析(2) 数据库驱动程序
  • 原文地址:https://www.cnblogs.com/shoshana-kong/p/10736945.html
Copyright © 2020-2023  润新知