快速了解行锁、表锁、排他锁、共享锁
2017-06-19 00:00
381 查看
1、什么事是锁?
锁是为了保证多个事务同时访问和修改同一个数据的情况下,把事务进行串行化,最后保证数据一致性的一种机制;
2、mysql锁的分类
共享锁(读锁 S):某个对象对某数据加共享锁之后可以对数据进行读取,其他对象可以同时对该数据加共享锁(其他人可以同时对该数据同时进行读取),但不允许其他对象包括自己对数据加排他锁(在查询中不能对数据进行修改);
手动加读取锁:LOCK tables test_db read 释放锁:UNLOCK TABLES;
排他锁(写锁 X):某个对象对某数据加排他锁之后(自身可对数据进行读取和修改),其他对象不允许对该数据加共享锁(不能对该数据进行读取)和排他锁(不能对该对象进行修改)
手动加写锁:LOCK tables test_db WRITE释放锁:UNLOCK TABLES;
3、mysql加锁的几种方式:
(1)表锁:使用表锁的方式请求会对整个表进行加锁,其他需要操作该表的请求都会被阻拦,只有等前一个操作把锁释放才下一个请求获取到该表的锁才可以对该表进行操作;
特点:加锁快,开销少(数据库加锁是通过索引的方式找到对应的数据进行加锁,找表要比找行速度要快)但锁粒度大(锁的粒度是在表身上)这种方式在高并发写的环境中性能低;
适用场景:表以读取为主,只有少量修写的情况下;
(2)行锁:试用行锁的方式请求会对表数据的某一行或者多行进行加锁,其他请求可以针对该表的其他数据行进行操作,但如果对同一行进行操作还是会以串行的方式来执行请求;
行锁加锁原理是通过对数据索引进行加锁;
特点:加锁慢,开销大,但锁粒度小(锁是加在对应的数据行上),多个请求可以同时请求同一张表不同数据,减少锁的冲突,这种方式利于高并发写的环境;
适用场景:表并发写的请求较多;
(3)页面锁:开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般。
锁是为了保证多个事务同时访问和修改同一个数据的情况下,把事务进行串行化,最后保证数据一致性的一种机制;
2、mysql锁的分类
共享锁(读锁 S):某个对象对某数据加共享锁之后可以对数据进行读取,其他对象可以同时对该数据加共享锁(其他人可以同时对该数据同时进行读取),但不允许其他对象包括自己对数据加排他锁(在查询中不能对数据进行修改);
手动加读取锁:LOCK tables test_db read 释放锁:UNLOCK TABLES;
排他锁(写锁 X):某个对象对某数据加排他锁之后(自身可对数据进行读取和修改),其他对象不允许对该数据加共享锁(不能对该数据进行读取)和排他锁(不能对该对象进行修改)
手动加写锁:LOCK tables test_db WRITE释放锁:UNLOCK TABLES;
3、mysql加锁的几种方式:
(1)表锁:使用表锁的方式请求会对整个表进行加锁,其他需要操作该表的请求都会被阻拦,只有等前一个操作把锁释放才下一个请求获取到该表的锁才可以对该表进行操作;
特点:加锁快,开销少(数据库加锁是通过索引的方式找到对应的数据进行加锁,找表要比找行速度要快)但锁粒度大(锁的粒度是在表身上)这种方式在高并发写的环境中性能低;
适用场景:表以读取为主,只有少量修写的情况下;
(2)行锁:试用行锁的方式请求会对表数据的某一行或者多行进行加锁,其他请求可以针对该表的其他数据行进行操作,但如果对同一行进行操作还是会以串行的方式来执行请求;
行锁加锁原理是通过对数据索引进行加锁;
特点:加锁慢,开销大,但锁粒度小(锁是加在对应的数据行上),多个请求可以同时请求同一张表不同数据,减少锁的冲突,这种方式利于高并发写的环境;
适用场景:表并发写的请求较多;
(3)页面锁:开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般。
相关文章推荐
- 共享锁和排他锁了解
- 【架构师】【数据库基础】【笔记 01】快速了解数据库系统的重要概念02
- 如何快速的了解某个技术是干什么的
- 带你快速了解WSGI
- 如何使用Shiro(快速了解Shiro)
- 快速了解数据仓库及数据建模的常用新术语
- [小技巧] Linux 下共享库如何快速定位
- 快速了解innodb锁概念
- 快速了解C#接口(Interface)
- 了解动态链接(三)—— 共享模块的全局变量问题
- 【转】MySQL中的共享锁与排他锁
- 共享锁与排他锁异同
- ETH挖矿教程,快速了解ETH挖矿
- spark学习七 共享内存的实现(快速的共享数据)
- 简单快速了解Vue.js的开发流程
- 新入职如何快速去了解一个Javaweb项目!
- retrofit 使用介绍(快速了解和集成retrofit)
- 带你快速了解“存储过程”的定义及优点
- vector存入共享内存(了解)
- 文件内存映射mmap解决大文件快速读写问题和进程间共享内存