Mysql 的表级锁和行级锁

表级锁

MySQL表级锁分为读锁和写锁。

读锁

用法:LOCK TABLE table_name [ AS alias_name ] READ

释放锁使用UNLOCK tables.可以为表使用别名,如果一旦使用别名在使用的时候也必须采用别名。成功申请读锁的前提是当前没有线程对该表使用写锁,否则该语句会被阻塞。申请读锁成功后,其他线程也可以对该表进行读操作,但不允许有线程对其进行写操作,就算是当前线程也不允许。当锁住了A表之后,就只能对A表进行读操作,对其他表进行读操作会出现错误(tablename was not locked with LOCK TABLES)

写锁

用法: LOCK TABLE table_name [AS alias_name] [ LOW_PRIORITY ] WRITE

同样也可以使用别名,与读锁不同的是,写锁中可以指定锁的优先级。LOW_PRIORITY是一种比读锁更低优先级的锁,当多个线程同时申请多种锁(LOW_PRIORITY,READ,WRITE)时,LOW_PRIORITY的优先级最低。读锁申请成功的前提是没有线程对表加读锁和其他写锁,否则会被阻塞。

表级锁在MyISAM和innoDB中都有用到,创建锁的开销小,不会出现死锁,由于锁定的是整张表,所以并发度低。当需要频繁对大部分数据做 GROUP BY 操作或者需要频繁扫描整个表时,推荐使用表级锁。

行级锁

行级锁是Mysql中锁定粒度最细的一种锁,能大大减少数据库操作的冲突,由于其粒度小,加锁的开销最大。行级锁分为共享锁和排他锁。

共享锁(S LOCK)

用法:SELECT ...LOCK IN SHARE MODE;

Mysql会对查询结果中的每行都加共享锁,当没有其他线程对查询结果集中的任何一行使用排他锁时,可以成功申请共享锁,否则会被阻塞。其他线程也可以读取使用了共享锁的表,而且这些线程读取的是同一个版本的数据。

排他锁(X LOCK)

用法:SELECT ...LOCK FOR UPDATE;

Mysql会对查询结果中的每行都加排他锁,当没有其他线程对查询结果集中的任何一行使用排他锁时,可以成功申请排他锁,否则会被阻塞。

行级锁都是基于索引的,如果一条SQL语句用不到索引是不会使用行级锁的,会使用表级锁。行级锁的缺点是:由于需要请求大量的锁资源,所以速度慢,内存消耗大。

时间: 2024-10-23 06:46:13

Mysql 的表级锁和行级锁的相关文章

-mysql-锁机制分为表级锁和行级锁

声明:本栏目所使用的素材都是凯哥学堂VIP学员所写,学员有权匿名,对文章有最终解释权:凯哥学堂旨在促进VIP学员互相学习的基础上公开笔记. mysql锁机制分为表级锁和行级锁 myISAM 引擎不支持事物! 排他锁: Set Autocommit=0; // 把事物设置成手动事物! 排他锁又称为写锁,简称X锁 排他锁就是不能与其他锁并存,如A事务获取了一行数据的排他锁,事务就不能再获取该行的其他锁 必须等A事物的排他锁结束才能对一行数据进行增删改! mysql InnoDB引擎默认的修改数据语句

CSS中的块级元素与行级元素

最近初学CSS时对块级元素与行级元素有时会产生混淆,写篇博客记录一下自己对其的理解. 先从概念上来看: 块级元素 特点:1.每个块级元素都是独自占一行,其后的元素也只能另起一行,并不能两个元素共用一行. 2.元素的高度.宽度.行高和顶底边距都是可以设置的. 3.元素的宽度如果不设置的话,默认为父元素的宽度. 常见的块级元素:<div>.<p>.<h1>...<h6>.<ol>.<ul>.<dl>.<table>

HTML学习笔记——块级标签、行级标签、图片标签

1>块级标签.行级标签 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv

MySQL学习笔记(五):MySQL表级锁和行级锁

一:概述 相对其他数据库而言,MySQL的锁机制比较简单,其最显著的特点是不同的存储引擎支持不同的锁机制.比如,MyISAM和MEMORY存储引擎采用的是表级锁(table-level locking):InnoDB存储引擎既支持行级锁( row-level locking),也支持表级锁,但默认情况下是采用行级锁. MySQL主要的两种锁的特性可大致归纳如下:? 表级锁: 开销小,加锁快:不会出现死锁(因为MyISAM会一次性获得SQL所需的全部锁):锁定粒度大,发生锁冲突的概率最高,并发度最

mysql基础--锁机制,表级锁,行级锁

一.表级锁 1.读锁,lock table t_student read;添加了读锁,使得其他sessionA和sessionB都不能修改数据,仅仅可以读数据. show processlist;查看进程,修改的时候状态是在等待表级锁,已经等待了8s 在解锁unlock tables;之后,修改数据的sql也执行成功,如下图所示 2.写锁,当某一个进程在对某一张表实施写锁后,在该进程如果完成了更新(写.insert.update.delete)之后,如果不释放写锁,其他的进程连查看这张表的权限都

悲观锁、乐观锁、行级锁、表级锁

1. 悲观锁(加的是表级锁) 一方:查询语句加 for update;另一方:查询语句加 for update; 当进行更新语句的时候,另一方不能进行更新操作 2. 乐观锁 更新语句设置版本号,在指定版本中更新数据 一方:update account set money=money-200,version=version+1 where id=1 and version=0; 另一方同时操作同一个版本号,则不能更新数据 另一方:update account set money=money+200

数据库的锁:行级锁、表锁、乐观锁、悲观锁的实现原理

一.相关名词 表级锁(锁定整个表) 页级锁(锁定一页) 行级锁(锁定一行) 共享锁(S锁,MyISAM 叫做读锁) 排他锁(X锁,MyISAM 叫做写锁) 悲观锁(抽象性,不真实存在这个锁) 乐观锁(抽象性,不真实存在这个锁) 二.InnoDB与MyISAM Mysql 在5.5之前默认使用 MyISAM 存储引擎,之后使用 InnoDB .查看当前存储引擎: show variables like '%storage_engine%'; MyISAM 操作数据都是使用的表锁,你更新一条记录就要

块级元素与行级元素(内联元素)

内联元素(inline element)一般都是基于语义级(semantic)的基本元素.内联元素只能容纳文本或者其他内联元素,常见内联元素"a". 块元素(block element)和内联元素(inline element)都是html规范中的概念.块元素和内联元素的基本差异是块元素一般都从新行开始.而当加入了css控制以后,块元素和内联元素的这种属性差异就不成为差异了.比如,我们完全可以把 内联元素cite加上display:block这样的属性,让他也有每次都从新行开始的属性.

HTML块级元素和行级元素

1.块级元素 行级元素?块级(block)元素的特点:①总是在新行上开始:②高度,行高以及外边距和内边距都可控制:③宽度缺省是它的容器的100%,除非设定一个宽度:④它可以容纳内联元素和其他块元素. 内联(inline)元素的特点:①和其他元素都在一行上:②高,行高及外边距和内边距不可改变:③宽度就是它的文字或图片的宽度,不可改变:④内联元素只能容纳文本或者其他内联元素. 2.块级元素:块级大多为结构性标记 =============常用有============= <address>...&