mysql锁机制

要注意存储引擎和隔离级别
如:
mysql> show create table t_bitfly\G;
CREATE TABLE `t_bitfly` (
`id` bigint(20) NOT NULL default '0',
`value` varchar(32) default NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk

mysql> select @@global.tx_isolation, @@tx_isolation;
+-----------------------+-----------------+
| @@global.tx_isolation | @@tx_isolation  |
+-----------------------+-----------------+
| REPEATABLE-READ       | REPEATABLE-READ |
+-----------------------+-----------------+

锁互斥情况:

 MySQL中的表锁兼容性                

请求锁模式

         是否兼容

当前锁模式

None读锁写锁
读锁
写锁


具体参考的文章(https://www.cnblogs.com/songwenjie/p/8643684.html(来源博客园,来自CoderFocus的文章))
1、MVCC只在[READ COMMITTED]和[REPEATABLE READ]两个隔离级别下工作。
2、MVCC是实现的是快照读,Next-Key Lock是当前读(取最新提交的数据,并加记录锁、间隙锁)。
   (MySQL InnoDB的可重复读并不保证避免幻读,需要应用使用加锁读来保证,而这个加锁读使用到的机制就是Next-Key Lock。)
   

[READ COMMITTED]: 读当前语句执行前已经提交的数据。
[REPEATABLE READ]:读当前事务执行前已经提交的数据。

[READ COMMITTED]:(读不加锁,写加锁),使用mvcc机制
脏读问题:已解决。
更新丢失问题:可通过应用加锁机制解决。

[REPEATABLE READ]:(读不加锁,写加锁),使用mvcc机制

参考文章:

MySQL使用可重复读作为默认隔离级别的原因:http://www.cnblogs.com/vinchen/archive/2012/11/19/2777919.html   
MySQL数据库InnoDB引擎行级锁锁定范围详解:https://segmentfault.com/a/1190000013307132
MySQL/InnoDB中,乐观锁、悲观锁、共享锁、排它锁、行锁、表锁、死锁概念的理解:https://segmentfault.com/a/1190000015815061
Mysql加锁过程详解(9)-innodb下的记录锁,间隙锁,next-key锁:https://www.cnblogs.com/crazylqy/p/7821481.html
如何开启和关闭MySQL 间隙锁(gap lock) :http://blog.itpub.net/15498/viewspace-2141515/
mysql死锁问题分析:https://www.cnblogs.com/LBSer/p/5183300.html
INSERT INTO … SELECT 锁表问题:https://blog.csdn.net/qq_21033663/article/details/70230798


注意点:
1)共享锁和排他锁都是行锁,意向锁都是表锁,应用中我们只会使用到共享锁和排他锁,意向锁是mysql内部使用的,不需要用户干预。
2)对于UPDATE、DELETE和INSERT语句,InnoDB会自动给涉及数据集加排他锁(X);对于普通SELECT语句,InnoDB不会加任何锁,事务可以通过以下语句显示给记录集加共享锁或排他锁。
共享锁(S):SELECT * FROM table_name WHERE ... LOCK IN SHARE MODE。
排他锁(X):SELECT * FROM table_name WHERE ... FOR UPDATE。
3)InnoDB行锁是通过给索引上的索引项加锁来实现的,因此InnoDB这种行锁实现特点意味着:只有通过索引条件检索数据,InnoDB才使用行级锁,否则,InnoDB将使用表锁!。


mysql数据库并发问题 封锁协议 隔离级别,眼见为实系列(来源博客园,来自CoderFocus的文章)
1、【眼见为实】数据库并发问题 封锁协议 隔离级别:http://www.cnblogs.com/songwenjie/p/8644674.html
3、【眼见为实】自己动手实践理解READ UNCOMMITED && SERIALIZABLE:http://www.cnblogs.com/songwenjie/p/8644599.html
4、【眼见为实】自己动手实践理解 READ COMMITTED && MVCC:http://www.cnblogs.com/songwenjie/p/8644646.html
5、【眼见为实】自己动手实践理解REPEATABLE READ && Next-Key Lock:http://www.cnblogs.com/songwenjie/p/8643684.html

MySQL数据库高级(七)——事务和锁(来自51cto博客,天山老妖S的博客)
http://blog.51cto.com/9291927/2096680
MySQL优化系列(八)--锁机制超详细解析(锁分类、事务并发、引擎并发控制)
https://blog.csdn.net/Jack__Frost/article/details/73347688

=================================================

线程、并发
数据库索引优化
线上问题排查、解决
秒杀
jvm 类加载机制、类的加载过程、内存模型

redis
消息队列
dubbo
solr搜索引擎
sprint boot2

elasticSearch/springCloud

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值