先前介绍过SELECT ... FOR
UPDATE的用法,不过锁定(Lock)的资料是判别就得要注意一下了。由于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)中才能生效。
分享到:
相关推荐
在MySQL中,主要存在两种类型的锁:行级锁(Row-Level Locks)和表级锁(Table-Level Locks)。InnoDB存储引擎默认支持行级锁,而MyISAM只支持表级锁。 行级锁能提供更高的并发性能,因为它只锁定操作影响的具体行...
MySQL数据库在处理并发事务时,可能会出现锁表的问题,这通常发生在多个事务同时访问和修改同一数据时。当一个事务尚未完成,其他事务无法进行相关操作,就会导致锁表现象,影响数据库性能和应用的正常运行。本文将...
MySQL中的`SELECT FOR UPDATE`语句是在事务处理中用于实现数据锁定的一种机制,它主要用于解决多用户并发操作时的数据一致性问题。在InnoDB存储引擎下,MySQL默认的事务隔离级别是`REPEATABLE READ`,这允许事务在...
MySQL数据库中的死锁是数据库管理系统中常见的问题,特别是在并发环境下,多事务操作可能导致死锁的发生。本文主要讨论了在使用`SELECT ... FOR UPDATE`语句时遇到的死锁情况,并通过具体的例子深入分析了死锁的原因...
然而,当你试图在同一个SQL语句中同时使用 `SELECT` 从一个表中获取数据并更新该表时,MySQL会抛出错误,因为它不支持在 `FROM` 子句中直接引用作为 `UPDATE` 目标表的表。这种限制可能会在某些复杂的数据处理场景下...
在数据库管理中,UPDATE语句用于修改已存在的数据记录,而SELECT语句则用于查询数据。在某些场景下,我们可能需要从UPDATE语句转换为SELECT语句,以验证更新操作将影响哪些行或者理解更新逻辑。这在调试、数据分析或...
本主题聚焦于“MySQL与Java锁的学习”,这是一门深入理解如何在数据库层(MySQL)和应用层(Java)处理并发问题的关键技能。下面我们将详细探讨MySQL中的锁机制以及Java如何与之协同工作。 **MySQL中的锁** MySQL...
而在第二个示例中,没有指定主键或其他唯一索引,MySQL可能会执行表级锁。 #### 五、总结 悲观锁是一种重要的并发控制机制,通过锁定数据来保证数据的一致性和准确性。在MySQL中,可以通过`SELECT ... FOR UPDATE`...
FOR UPDATE` 或 `UPDATE/DELETE`)则会阻止其他事务读取和写入该表,直到锁被释放。 - 表级锁的优缺点:锁定粒度大,导致锁冲突的可能性较高,但锁定和解锁速度快,适合于锁定操作较少、数据争用不激烈的情况。 3...
- `SELECT TOP 10 * FROM 数据表 WHERE 字段名 = 字段值 ORDER BY 字段名 [DESC]`:这是SQL Server的语法,但在MySQL中,你可以使用`LIMIT 10`来获取前10条匹配的记录。 - `SELECT * FROM 数据表 WHERE 字段名 IN...
- 在会话A中,对某行添加排它锁:`SELECT * FROM orders WHERE order_id = 1 FOR UPDATE;` - 会话B尝试获取该行的共享锁或排它锁:`SELECT * FROM orders WHERE order_id = 1 FOR SHARE;`(此操作将被阻塞) - ...
MySQL中的事务,默认是自动提交的,即autocommit = 1; 但是这样的话,在某些情形中就会出现问题:比如: 如果你想一次性插入了1000条数据,mysql会commit1000次的, 如果我们把autocommit关闭掉[autocommit = 0],...
- 临时表同样基于`SELECT`语句构建,但因其结果集预先加载到了服务器内存中,所以在执行后续的`UPDATE`、`DELETE`或`INSERT`操作时,不会产生错误。 综上所述,MySQL中的临时表和派生表各有特点,可以根据具体的...
在MySQL数据库环境中,处理并发更新问题是一个常见的挑战,特别是在高流量的应用中。本文将深入探讨如何使用`SELECT+UPDATE`策略解决这个问题,并分享两种具体的解决方案。 首先,让我们回顾一下问题的背景。假设...
MySQL锁是数据库管理系统中用于控制并发访问的一种机制,它的主要目的是确保在多用户环境中数据的一致性和完整性。在介绍MySQL锁之前,我们首先要理解为什么需要引入锁。在并发操作数据库时,可能出现数据不一致的...
- 为了能够在命令行中直接运行MySQL的相关命令,需要将MySQL的bin目录添加到系统环境变量Path中。 - 修改方法:在系统环境变量中找到Path,将`%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;`这...
MySQL 数据库中 group by 语句与 update 语句的用法研究 本论文对 MySQL 数据库中的 group by 语句和 update 语句进行了深入研究,讨论了这些语句在数据库查询和修改中的应用,并给出了具体的解决方案。 一、MySQL...