zoukankan      html  css  js  c++  java
  • mysql的各种锁简单总结

    表总体上分为三种:

      1、表锁 Myisam  开销小,并发低,加锁快,不会出现死锁问题;锁粒度大,发生锁冲突的概率最高。

      2、行锁 innodb    开销大,并发高,加锁慢,会出现死锁问题;锁粒度小,发生锁冲突的概率最低。

      3、页面锁     开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般。(不常用)

    共享锁(读锁)/排它锁(写锁)

      共享锁又叫读锁,是读取操作创建的锁。其他用户可以同步读取数据,但是不能够写数据。

      排它锁又叫写锁,是更新操作创建的锁。其他用户不可以同步读取数据更不能写数据。

    MyIsam锁模式:

      MyIsam引擎在执行查询语句前,会自动给涉及到的表添加读锁;在更新操作前会自动给涉及到的表加写锁。

      a、对MyIsam中的表进行读取操作,其他用户可以进行读取,但是不能修改;

      b、对MyIsam中的表进行更新操作,其他用户不能进行读取,更不能进行操作。

    InnoDb锁模式:

      对于insert、update、delete,InnoDB会自动给涉及的数据加排他锁(X);对于一般的Select语句,InnoDB不会加任何锁,事务可以通过以下语句给显示加共享锁或排他锁。
    共享锁: SELECT ... LOCK IN SHARE MODE;
    排他锁: SELECT ... FOR UPDATE;

    InnoDb是根据索引加行锁的,如果没有索引的话依然是加表锁。因此如果多行数据都使用同一个索引,会出现锁冲突。

    乐观锁:不加锁,更新数据时需要查看该数据是否在更新期间被更改过,如果有被更改过就放弃本次更新。否则将更新提交。适合多为查询的场景。当出现大量更新操作时,可能会造成大量冲突的情况。

    悲观锁:每次获取数据时都要对数据进行加锁,确保自己使用该数据时,该数据不会被别人修改。适用于多为更新操作的场景。当出现大量读操作时,每次读取都会加锁,会造成堵塞。

      

  • 相关阅读:
    一个家伙与javascript的故事
    Quick-Cocos2dx 3.3中关于cc.ScaleTo动作不能得到预期效果
    vim的youcompleteme插件安装过程
    MAC OS上编译mod_wsgi不成功问题的解决办法
    Quick-Cocos2dx中对一个Node的所有成员应用灰色滤镜
    Sublime text安装各种插件
    Quick-Cocos2dx 3.3编译android版本
    bootstrap轮播,播放到最后一张图片的时候,就不正确了。
    Apache2.2 + php5配置
    swift 笔记
  • 原文地址:https://www.cnblogs.com/television/p/11158276.html
Copyright © 2011-2022 走看看