码迷,mamicode.com
首页 > 数据库 > 详细

mysql的各种锁简单总结

时间:2019-07-09 16:46:57      阅读:134      评论:0      收藏:0      [点我收藏+]

标签:排它锁   适合   family   出现   情况   大量   行操作   upd   lock   

表总体上分为三种:

  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是根据索引加行锁的,如果没有索引的话依然是加表锁。因此如果多行数据都使用同一个索引,会出现锁冲突。

 

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

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

  

mysql的各种锁简单总结

标签:排它锁   适合   family   出现   情况   大量   行操作   upd   lock   

原文地址:https://www.cnblogs.com/television/p/11158276.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!