InnoDB引擎的行锁和表锁

在Mysql中,Innodb数据引擎支持行锁和表锁,Myisam数据引擎只支持表锁


1 行锁和表锁

行锁是通过索引加载的,行锁是加在索引字段上的,如果该Sql语句没有使用索引,则会造成全表扫描使用表锁.

锁冲突:例如说事务A将某几行上锁后,事务B又对其上锁,锁不能共存否则会出现锁冲突。(但是共享锁可以共存,共享锁和排它锁不能共存,排它锁和排他锁也不可以) 死锁:例如说两个事务,事务A锁住了1~5行,同时事务B锁住了6~10行,此时事务A请求锁住6~10行,就会阻塞直到事务B施放6~10行的锁,而随后事务B又请求锁住1~5行,事务B也阻塞直到事务A释放1~5行的锁。死锁发生时,会产生Deadlock错误。

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

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

2 行锁的类型

行锁分共享锁和排它锁

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

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

上共享锁的写法:select  math from zje where math>60 lock in share mode;
上排它锁的写法:select math from zje where math >60 for update;

3 行锁的实现

行锁必须使用索引才可以,否则会自动锁全表
两个事务不能锁同一个索引
insert ,delete , update在事务中都会自动默认加上排它锁

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 我以为孤独会将人抛入深渊 谁知就在眼前。 人总是不愿意面对已经发生的失败, 实锤这件事之前,总是研制后悔药。 始皇...
    FOXOX阅读 884评论 0 1
  • 你终究是要长大,你终究是该脱离曾经的美梦。 你还没有长大。所以你用手紧紧地攥着周围人的衣角,攥着每一个在你身旁出现...
    风小酥阅读 1,872评论 2 2