zoukankan      html  css  js  c++  java
  • 锁机制

    今天在看分库分表的时候突然想到了锁

    现在我们就来看看锁

    mysql举例:

    InnoDB引擎的行锁和表锁

     

    表锁:不会出现死锁,发生锁冲突几率高,并发低。

    行锁:会出现死锁,发生锁冲突几率低,并发高。

    锁冲突:例如说事务A将某几行上锁后,事务B又对其上锁,锁不能共存否则会出现锁冲突。(但是共享锁可以共存,共享锁和排它锁不能共存,排它锁和排他锁也不可以)

    死锁:例如说两个事务,事务A锁住了1~5行,同时事务B锁住了6~10行,此时事务A请求锁住6~10行,就会阻塞直到事务B施放6~10行的锁,而随后事务B又请求锁住1~5行,事务B也阻塞直到事务A释放1~5行的锁。死锁发生时,会产生Deadlock错误。

    锁是对表操作的,所以自然锁住全表的表锁就不会出现死锁。

    2.行锁的类型

    行锁分 共享锁 和 排它锁。

    共享锁又称:读锁。当一个事务对某几行上读锁时,允许其他事务对这几行进行读操作,但不允许其进行写操作,也不允许其他事务给这几行上排它锁,但允许上读锁。

    排它锁又称:写锁。当一个事务对某几个上写锁时,不允许其他事务写,但允许读。更不允许其他事务给这几行上任何锁。包括写锁。

    上共享锁的写法:lock in share mode

    例如: select  math from zje where math>60 lock in share mode;

    上排它锁的写法:for update

    例如:select math from zje where math >60 for update;

    3.行锁的实现

    注意几点:

    1.行锁必须有索引才能实现,否则会自动锁全表,那么就不是行锁了。

    2.两个事务不能锁同一个索引

    3.insert ,delete , update在事务中都会自动默认加上排它锁。

  • 相关阅读:
    Windows 7 任务计划程序
    '7z' 不是内部或外部命令,也不是可运行的程序
    [转]国外人气最旺的软件测试网站
    AutoIT查找文件内容并修改保存
    BUG 太少
    excel表格数据导入sqlserver数据库
    RoR常见问题
    [转]漫画:程序员的一生
    [转]RubyInstaller: Getting Started with Rails and SQLite3
    [转]C#多线程学习(一) 多线程的相关概念
  • 原文地址:https://www.cnblogs.com/lqh969696/p/13434818.html
Copyright © 2011-2022 走看看