当前位置: 首页 > 图文教程 > 数据库 > MYSQL > Mysql教程 对MySQL中的锁机制的总结

MYSQL
MySQL 5.0默认100连接数的修改
如何使用"MySQL-Proxy"实现读写分离
phpMyAdmin下载、安装和使用入门
安装phpMyAdmin数据库管理软件
关于Mysql数据库导致CPU很高的问题解决
Mysql数据库的导入导出 和 Liunx的权限
MySQL InnoDB存储引擎的一些参数
MySQL InnoDB存储引擎的事务隔离级别
MySQL中InnoDB和MyISAM类型的差别
如何在.NET中访问MySQL数据库
关于 mysql5 改密码后不能登录问题的解答
初学者必读 MySQL 数据库常见问题汇总
MySQL字符集:怎样才能保证不发生乱码
详细讲解优化MySQL数据库性能的十个参数
教你使用MySQL触发器自动更新memcache
SQL存储过程和触发不能使用USE的应对方法
MySQL怎样处理一个溢出的磁盘
MySQL出错代码含义列表解释一表通
服务器安装MySQL教程及注意事项
完美解决mysql中文乱码的问题

MYSQL 中的 Mysql教程 对MySQL中的锁机制的总结


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-17   浏览: 108 ::
收藏到网摘: n/a

  今天来简单总结一下MySQL的锁机制,不妥的欢迎拍砖!

  1、对于MySQL来说,有三种锁的级别:页级、表级、行级。

  页级的典型代表引擎为BDB。

  表级的典型代表引擎为MyISAM,MEMORY以及很久以前的ISAM。

  行级的典型代表引擎为INNODB。

  2、我们实际应用中用的最多的就是行锁了。

  行级锁的优点如下:

  1)、当很多连接分别进行不同的查询时减小LOCK状态。

  2)、如果出现异常,可以减少数据的丢失。因为一次可以只回滚一行或者几行少量的数据。

  行级锁的缺点如下:

  1)、比页级锁和表级锁要占用更多的内存。

  2)、进行查询时比页级锁和表级锁需要的I/O要多,所以我们经常把行级锁用在写操作而不是读操作。

  3)、容易出现死锁。

  3、MySQL用写队列和读队列来实现对数据库的写和读操作。

  对于写锁定如下:

  1)、如果表没有加锁,那么对其加写锁定。

  2)、否则,那么把请求放入写锁队列中。

  对于读锁定如下:

  1)、如果表没有加写锁,那么加一个读锁。

  2)、否则,那么把请求放到读锁队列中。

  当然我们可以分别用low_priority 以及high_priority在写和读操作上来改变这些行为。

  4、下面我来一个简单的例子解释上面的说法

  我们来运行一个时间很长的查询

  1)客户端1:

  mysql>selectcount(*) from content group by content;

  ...

  客户端2:

  mysql>updatecontent set content = 'I love you' where id = 444;

  Query OK, 1 row affected (30.68 sec)

  Rows matched: 1 Changed: 1 Warnings: 0

  用了半分钟。

  2)我们现在终止客户端1。

  此时客户端2:

  mysql>updatecontent set content = 'I hate you' where id = 444;

  Query OK, 1 row affected (0.02 sec)

  Rows matched: 1 Changed: 1 Warnings: 0

  仅仅用了20毫秒。

  这个例子很好的说明了读写队列的运行。

  对于1中的客户端1,此时表没有加锁,当然也没有加写锁了,那么此时客户端1对表加了一个读锁。

  对于1中的客户端2,此时因为表有一个读锁,所以把UPDATE请求放到写锁定队列中。

  当读锁释放的时候,也就是SHOW PROCESSLIST中STATUS 为COPY TO TMP TABLE的时候,UPDATE操作开始执行。

  5、可以在REPLICATION中对MASTER 和SLAVE运用不同的锁定使系统达到最佳的性能。(当然这个前提是SQL语句都是最优的。)