mysql中for update的用法是什么

文 / @WordPress主题

MySQL中forupdate的用法详解

在高并发、数据准确性要求高的情况下,我们需要使用forupdate来给数据加锁,保证数据的正确性。在本文中,我们将介绍forupdate的使用场景、使用方法、锁表情况以及注意事项等内容。

一、forupdate的使用场景

当存在高并发,并且对于数据的准确性很有要求的场景,是需要了解和使用forupdate的。比如涉及到金钱、库存等操作,一般都是很长一串并且是开启事务的。如果出现两个以上的事务同时对同一份数据进行读写操作,就会出现数据错误的问题。这时候,我们需要给数据加锁,保证操作的准确性,这就是forupdate的作用。

二、forupdate的使用方法

1. forupdate的基本姿势

使用forupdate的基本姿势是:

SELECT * FROM table WHERE qqq FOR UPDATE;

其中,“table”表示表名,“qqq”表示查询条件,FOR UPDATE表示给查询结果加上排它锁。

2. forupdate的锁表情况

(1)行级锁

InnoDB默认是行级别的锁,当有明确指定的主键时候,是行级锁。否则是表级别。

例如:

假设表“foods”,存在有“id”和“name”两个字段,“id”是主键,“name”有索引。

(2)明确指定主键/索引,若查无此记录,无锁

例如:

SELECT * FROM foods WHERE id=1 FOR UPDATE;
SELECT * FROM foods WHERE id=1 and name='XXX' FOR UPDATE;

(3)无主键/索引,表级锁

例如:

SELECT * FROM foods WHERE name='XXX' FOR UPDATE;

(4)主键/索引不明确,表级锁

例如:

SELECT * FROM foods WHERE id'3' FOR UPDATE;
SELECT * FROM foods WHERE id LIKE '3' FOR UPDATE;

三、forupdate的注意事项

1. forupdate仅适用于InnoDB,并且必须开启事务,在begin与commit之间才生效。

2. 要测试forupdate的锁表情况,可以利用MySQL的CommandMode,开启两个视窗来做测试。

以上就是MySQL中forupdate的用法,通过使用forupdate,我们可以在高并发的情况下,保证数据的准确性。

添加UTHEME为好友
扫码添加UTHEME微信为好友
· 分享WordPress相关技术文章,主题上新与优惠动态早知道。
· 微信端最大WordPress社群,限时免费入群。