zoukankan      html  css  js  c++  java
  • 锁的类型和兼容性

       当我们使用单击版的系统时,根本不需要考虑并发量,但现在我们很多的系统都会有大量用户,我们就不得不面对并发,当出现并发访问时,我们自然会想到加锁,而数据库会自动管理锁,当进行查询和修改数据库时,自动为其加上锁。接下来我们先来看一下有哪几种锁!


    一、共享锁

       共享:正如这个词的中文意思一样,大家可以可以共享资源。共享锁主要用于读写数据操作,它是非读占的,允许其他事务同时读取其锁定的资源,但不允许修改。

       特点:

         加锁条件:当一个事务执行查询Select语句时,数据库会自动为其加上一把共享锁,来锁定被查询的数据

         解锁条件:默认情况下,当数据库被读取后,数据库立即解除共享锁。

         与其他所的兼容性:数据上还可以防止共享锁和更新锁

         并发性能:具有良好的并发性能,当多个事务读取相同的数据时,每个事务会得到一把共享锁,故可以

                同时读锁定的数据。


    二、独占锁

       人如其名,非常霸道,只能自己来使用,不允许其他事务读取和修改。独占锁,也叫排他锁,适用于修改数据 的地方,我自己来修改,改完后其他事务才可以操作。

       特点:

          加锁条件:当一个事务执行insert、update、delete语句时,数据库会自动对SQL语句操作的数据资源

                使用独占锁。如果数据资源上已有其他锁,将不能添加独占锁。

          解锁条件:当事务结束,独占锁被解除。

          与其他所兼容性:不能兼容其他锁

          并发性能:并发性能差,只允许一个事务访问访问锁定的资源。其他事务需要访问相同资源时,必须等

                待前一个事务结束,解除了独占锁,其他事务才有机会访问该数据。


    三、更新锁

       更新是初始化阶段用来锁定可能要被修改的资源,这样可以避免死锁现象。 

       例如:update语句

        update T_user set user_name ="zss" where id =1;

       使用更新锁,更新数据的操作分为两步:

       (1)获得一个更新锁,读取T_user表中id为1的记录

       (2)将更新锁升级为独占锁,更新数据库表中的数据

       特点:

          加锁条件:当一个事务执行update语句时,数据库为事务分配一个更新锁。

          解锁条件:当数据读取完毕,执行更新操作时,将更新锁升级为独占锁。

          与其他锁兼容性:更新锁和共享锁兼容,但一个资源最多放置一个更新锁

          并发性能:允许多个事务同时读锁定的资源,但不允许其他事务修改它。


    四、总结

       我们操作数据库,从数据库角度来看,就是这三种锁,我们利用锁就是用来解决高并发访问下数据不一致的额问题。这是从数据库角度来看我们将锁分为三种,我们看看从开发人员的角度来看,锁又分为哪几种呢?期待我的更新吧!

               

  • 相关阅读:
    Flutter网络请求库Dio的封装(单例、动态baseUrl、拦截器、日志、请求loading)
    解决GitHub无法访问问题
    Flutter开发(18)- 屏幕适配
    【Flutter 实战】各种各样形状的组件
    vscode 清除多余空行
    项目实战整理 Flutter 代码与目录规范v1.0
    flutter 显示表情
    vscode常用快捷键与插件推荐
    在vscode中开发Flutter alt + enter快捷键不起作用(没反应)的解决方法
    Flutter Icons 内置图标库,全套Material图标
  • 原文地址:https://www.cnblogs.com/zsswpb/p/6329433.html
Copyright © 2011-2022 走看看