要注意存储引擎和隔离级别
如:
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.youkuaiyun.com/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.youkuaiyun.com/Jack__Frost/article/details/73347688
=================================================
线程、并发
数据库索引优化
线上问题排查、解决
秒杀
jvm 类加载机制、类的加载过程、内存模型
redis
消息队列
dubbo
solr搜索引擎
sprint boot2
elasticSearch/springCloud