参考 http://www.jb51.net/article/50047.htm 《MySQL行级锁、表级锁、页级锁详细介绍》

页级:引擎 BDB。
表级:引擎 MyISAM , 理解为锁住整个表,可以同时读,写不行
行级:引擎 INNODB , 单独的一行记录加锁 (更详细的行锁、表锁,可以参考:http://www.cnblogs.com/charlesblc/p/5935326.html

表级,直接锁定整张表,在你锁定期间,其它进程无法对该表进行写操作。如果你是写锁,则其它进程则读也不允许
行级,,仅对指定的记录进行加锁,这样其它进程还是可以对同一个表中的其它记录进行操作。
页级,表级锁速度快,但冲突多,行级冲突少,但速度慢。所以取了折衷的页级,一次锁定相邻的一组记录。

上述三种锁的特性可大致归纳如下:
1) 表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。
2) 行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。
3) 页面锁:开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般。

加表锁的方式:

mysql> LOCK TABLES real_table WRITE, insert_table WRITE;
mysql> INSERT INTO real_table SELECT * FROM insert_table;
mysql> TRUNCATE TABLE insert_table;
mysql> UNLOCK TABLES;

MySQL表级锁有两种模式:表共享读锁(Table Read Lock)和表独占写锁(Table Write Lock)。

当一个进程请求某个MyISAM表的读锁,同时另一个进程也请求同一表的写锁,此时MySQL将会如优先处理进程呢?通过研究表明,写进程将先获得锁(即使读请求先到锁等待队列)。但这也造成一个很大的缺陷,即大量的写操作会造成查询操作很难获得读锁,从而可能造成永远阻塞。其机制是通过控制一个系统变量(concurrent_insert)来改变,更详细的见原文。

MyISAM表的读和写是串行的,即在进行读操作时不能进行写操作,反之也是一样。但在一定条件下MyISAM表也支持查询和插入的操作的并发进行,其机制是通过控制一个系统变量(concurrent_insert)来进行的。(更详细的见原文)

InnoDB锁与MyISAM锁的最大不同在于:一是支持事务(TRANCSACTION),二是采用了行级锁。我们知道事务是由一组SQL语句组成的逻辑处理单元,其有四个属性(简称ACID属性),分别为:

原子性(Atomicity):事务是一个原子操作单元,其对数据的修改,要么全部执行,要么全都不执行;
一致性(Consistent):在事务开始和完成时,数据都必须保持一致状态;
隔离性(Isolation):数据库系统提供一定的隔离机制,保证事务在不受外部并发操作影响的“独立”环境执行;
持久性(Durable):事务完成之后,它对于数据的修改是永久性的,即使出现系统故障也能够保持。

InnoDB有两种模式的行锁:

1)共享锁:允许一个事务去读一行,阻止其他事务获得相同数据集的排他锁。
    ( Select * from table_name where ......lock in share mode)

2)排他锁:允许获得排他锁的事务更新数据,阻止其他事务取得相同数据集的共享读锁和  排他写锁。

(select * from table_name where.....for update)

最新文章

  1. VB.NET 创建文件以及文件的读写(创建随机数)
  2. linux命令(7):mv命令
  3. 利用ADO.NET导出大批量数据
  4. Codeforces Round #249 (Div. 2)
  5. JAVA 主函数(主方法)
  6. Web表格
  7. 【COM学习】之一、QueryInterface
  8. NET基础课--开发工具实用功能
  9. 【Linux命令】Ubuntu14.04+QT5.2配置mysql
  10. python读取EXCLE文件数据
  11. Android lint具 常见问题检查
  12. 【web开发学习笔记】Structs2 Action学习笔记(两)
  13. Java动态代理深入解析
  14. LeetCode33—搜索旋转排序数组
  15. Python3.x - 字符串
  16. C++程序设计方法4:成员函数模板
  17. Python 3安装MySQLdb
  18. python-i春秋验证码识别
  19. 虚拟机spark集群搭建
  20. GeSHi——通用语法高亮显示

热门文章

  1. 配置F5 负载均衡(转)
  2. js动态添加file控件
  3. 在 WinCe 平台读写 ini 文件
  4. Hadoop webHDFS设置和使用说明
  5. mysql安装使用--2 用户管理
  6. Ubuntu安装pycharm
  7. html 自定义标签的作用
  8. hibernate---一对一双向外键关联 (重要)
  9. iOS学习基本常识
  10. Python正则表达式,统计分析nginx访问日志