mysql的行锁与表锁(select*....forupdate)

author author     2023-04-30     606

关键词:

参考技术A   mysql中使用select
for
update的必须针对InnoDb,并且是在一个事务中,才能起作用。
  select的条件不一样,采用的是行级锁还是表级锁也不一样。
  由于
InnoDB
预设是
Row-Level
Lock,所以只有「明确」的指定主键,MySQL
才会执行
Row
lock
(只锁住被选取的资料例)
,否则
MySQL
将会执行
Table
Lock
(将整个资料表单给锁住)。
  举个例子:
  假设有个表单
products
,里面有
id

name
二个栏位,id
是主键。
  例1:
(明确指定主键,并且有此笔资料,row
lock)
  SELECT
*
FROM
products
WHERE
id='3'
FOR
UPDATE;
  例2:
(明确指定主键,若查无此笔资料,无
lock)
  SELECT
*
FROM
products
WHERE
id='-1'
FOR
UPDATE;
  例2:
(无主键,table
lock)
  SELECT
*
FROM
products
WHERE
name='Mouse'
FOR
UPDATE;
  例3:
(主键不明确,table
lock)
  SELECT
*
FROM
products
WHERE
id<>'3'
FOR
UPDATE;
  例4:
(主键不明确,table
lock)
  SELECT
*
FROM
products
WHERE
id
LIKE
'3'
FOR
UPDATE;
  注1:
  FOR
UPDATE
仅适用于
InnoDB,且必须在交易区块(BEGIN/COMMIT)中才能生效。
  注2:
  要测试锁定的状况,可以利用
MySQL

Command
Mode
,开二个视窗来做测试。

关于数据库行锁与表锁的认识(代码片段)

...查询这一条记录却是可以的也就是说虽然这一条记录所在的行被锁定了,但是并不影响我们正常的查询,当然了针对这一行的DML操作也是无效的那如果我们对除了cardid=‘1’的其他行操作会怎样呢?对于其他的行DML是完全... 查看详情

行锁页面锁与表锁(代码片段)

按锁定粒度:表锁、页面锁、行锁存储引擎支持情况: 在具体说明之前得明白什么是死锁,什么是锁冲突死锁:多个进程互相等待对方锁的释放锁冲突:一个进程等待另一个进程释放需要的锁  行锁粒度小,开销大,... 查看详情

从头开始搞懂mysql(05)行锁表锁全局锁(代码片段)

1、行锁行锁是针对数据表中行记录的锁,MySQL的行锁是在引擎层实现的,并不是所有的引擎都支持行锁,比如MyISAM就不支持,InnoDB支持行锁,避免了并发控制时使用表锁1.1两阶段锁在InnoDB事务中,行锁是在... 查看详情

mysql悲观锁是行锁还是表锁?(代码片段)

mysql悲观锁是行锁还是表锁?结论悲观锁在非主键、非索引时是表锁,在主键、索引时是行锁。使用悲观锁在查询语句后面加上forupdate开启悲观锁。select*fromtablewherecol=xxforupdate;悲观锁:在事务执行开始加锁,此... 查看详情

mysql悲观锁是行锁还是表锁?(代码片段)

mysql悲观锁是行锁还是表锁?结论悲观锁在非主键、非索引时是表锁,在主键、索引时是行锁。使用悲观锁在查询语句后面加上forupdate开启悲观锁。select*fromtablewherecol=xxforupdate;悲观锁:在事务执行开始加锁,此... 查看详情

Mysql 表锁代替行锁

】Mysql表锁代替行锁【英文标题】:Mysqltablelockinsteadofrowlocks【发布时间】:2013-12-0205:23:35【问题描述】:Mysql(5.5)Innodb在这种情况下是放置表锁而不是行锁。这会导致对表的其他插入查询失败。这也是更大交易的一部分。Insertintot... 查看详情

mysql的行锁

...时看完了MySQL的全局锁、表级锁还有行锁和间隙锁。其中的行锁和间隙锁迟迟无法理解,最近趁着有空再次阅读了一遍,并且对照了《深入浅出MySQL》,发现对MySQL锁的理解又上了一个台阶,今天就来分享一下MySQL... 查看详情

mysql高级——锁与事务(代码片段)

...合的场景读阻塞写、写阻塞读手动锁定一行实现一个事务行锁升级为表锁的情况间隙锁的问题(范围查询加锁)next-key锁(非聚簇索引等值查询加范围锁,InnoDB默认加锁方式)1.2事务与MySQL隔离级别1.2.1事务与事务的ACID属性***1.2.2并... 查看详情

mysql高级——锁与事务(代码片段)

...合的场景读阻塞写、写阻塞读手动锁定一行实现一个事务行锁升级为表锁的情况间隙锁的问题(范围查询加锁)next-key锁(非聚簇索引等值查询加范围锁,InnoDB默认加锁方式)1.2事务与MySQL隔离级别1.2.1事务与事务的ACID属性***1.2.2并... 查看详情

数据库中的行锁和表锁

一、事务并发调度的问题脏读:A事务读取B事务尚未提交的更改数据,并在这个数据基础上操作。如果B事务回滚,那么A事务读到的数据根本不是合法的,称为脏读。在oracle中,由于有version控制,不会出现脏读。不可重复读:A事... 查看详情

mysql----共享锁独占锁行锁表锁(代码片段)

...s)2、锁定读(LockingReads)2.1共享锁2.2独占锁2.2锁定读语句3、行锁3.1行锁3.1.1RecordLocks(记录锁)3.1.2GapLocks3.1.3Next-KeyLock3.1.4InsertIntentionLocks3.1.5隐式锁3.2表锁3.2.1表锁的S、X锁3.2.2表锁意向锁的IS、IX锁3.2.3表级别的AU 查看详情

mysql——锁(代码片段)

...行级锁/行锁2.2、表级锁/表锁2.3、表锁的划分三、MySQL中的行锁和表锁3.1、其他存储引擎中的锁3.2、InnoDB存储引擎中的锁3.2.1、InnoDB中的表级锁3.2.1.1、S锁、X锁3.2.1.2、IS锁、IX锁3.2.1.3、AUTO-INC锁3.2.2、InnoDB中的行级锁3.2.2.1、RecordLock... 查看详情

mysql——锁(代码片段)

...行级锁/行锁2.2、表级锁/表锁2.3、表锁的划分三、MySQL中的行锁和表锁3.1、其他存储引擎中的锁3.2、InnoDB存储引擎中的锁3.2.1、InnoDB中的表级锁3.2.1.1、S锁、X锁3.2.1.2、IS锁、IX锁3.2.1.3、AUTO-INC锁3.2.2、InnoDB中的行级锁3.2.2.1、RecordLock... 查看详情

mysql数据库表锁行锁

mysql有2种常见的锁:表锁和行锁一、表锁1)读锁假如当前有2个session,session1获得表table的读锁,对表table进行查询,并尚未释放读锁,因为读锁是读共享锁,所以此时session2也是可以对table进行读操作。... 查看详情

mysql中的表锁行锁共享锁很难吗?看了本文就清楚了哦(代码片段)

...给大家详细的来介绍下MySQL数据中的各种锁。一、表锁和行锁1.表锁表锁的优势:开销小;加锁快;无死锁表锁的劣势:锁粒度大,发生锁冲突的概率高,并发处理能力低加锁的方式:自动加锁。查询操... 查看详情

mysql锁机制表锁和行锁详解

...会阻断其他锁和读锁。从对数据操作的粒度分:表锁行锁表锁( 查看详情

mysql简单介绍——换个角度认识mysql

...数据,索引集中存储,存储于同一个表空间文件中。InnoDB的行锁模式及其加锁方法:InnoDB中有以下两种类型的行锁:共享锁(读锁:允许事务对一条行数据进行读取)和互斥锁(写锁:允许事务对一条行数据进行删除或更新),... 查看详情

mysql存储过程出现锁表锁行的情况怎么解决

...ert一条主键值为1的数据,由于事务A首先获取了主键值为1的行锁,导致事务B因无法获取行锁而产生等待,等到事务A提交后,事务B才获取该行锁,完成提交。这里强调的是行锁的概念,虽然事务B重复插入了主键,但是在获取行... 查看详情