`
crazier9527
  • 浏览: 1008618 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

[MySQL] SELECT ... FOR UPDATE 的 Row Lock 與 Table Lock

阅读更多

先前介紹過 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)中才能生效。

註2:
要測試鎖定的狀況,可以利用 MySQL 的 Command Mode ,開二個視窗來做測試。

分享到:
评论

相关推荐

    mysql SELECT FOR UPDATE语句使用示例

    MySQL中的`SELECT FOR UPDATE`语句是在事务处理中用于实现数据锁定的一种机制,它主要用于解决多用户并发操作时的数据一致性问题。在InnoDB存储引擎下,MySQL默认的事务隔离级别是`REPEATABLE READ`,这允许事务在...

    MySQL锁类型以及子查询锁表问题、解锁1

    在MySQL中,主要存在两种类型的锁:行级锁(Row-Level Locks)和表级锁(Table-Level Locks)。InnoDB存储引擎默认支持行级锁,而MyISAM只支持表级锁。 行级锁能提供更高的并发性能,因为它只锁定操作影响的具体行...

    MySQL悲观锁总结和实践

    FOR UPDATE 的 Row Lock 与 Table Lock 在使用`SELECT ... FOR UPDATE`时,需要注意锁的级别。MySQL InnoDB 默认使用行级锁(Row-Level Lock),但在某些情况下可能会使用表级锁(Table Lock)。 - **行级锁(Row...

    mysql事务select for update及数据的一致性处理讲解

    值得注意的是,InnoDB的行级锁(Row-Level Lock)在未明确指定主键时可能会降级为表级锁(Table Lock),这会导致所有对该表的读写操作都被阻塞,直到事务结束。因此,为了最小化锁定范围,务必在`SELECT ... FOR ...

    MySQL 5.1参考手册

    2.3.14. 在Windows环境下对MySQL安装的故障诊断与排除 2.3.15. 在Windows下升级MySQL 2.3.16. Windows版MySQL同Unix版MySQL对比 2.4. 在Linux下安装MySQL 2.5.在Mac OS X中安装MySQL 2.6. 在NetWare中安装MySQL 2.7....

    MySQL 5.1中文手冊

    2.3.14. 在Windows环境下对MySQL安装的故障诊断与排除 2.3.15. 在Windows下升级MySQL 2.3.16. Windows版MySQL同Unix版MySQL对比 2.4. 在Linux下安装MySQL 2.5.在Mac OS X中安装MySQL 2.6. 在NetWare中安装MySQL 2.7....

    MySQL 5.1参考手册中文版

    2.3.14. 在Windows环境下对MySQL安装的故障诊断与排除 2.3.15. 在Windows下升级MySQL 2.3.16. Windows版MySQL同Unix版MySQL对比 2.4. 在Linux下安装MySQL 2.5.在Mac OS X中安装MySQL 2.6. 在NetWare中安装MySQL ...

    MySQL 5.1参考手册 (中文版)

    2.3.14. 在Windows环境下对MySQL安装的故障诊断与排除 2.3.15. 在Windows下升级MySQL 2.3.16. Windows版MySQL同Unix版MySQL对比 2.4. 在Linux下安装MySQL 2.5.在Mac OS X中安装MySQL 2.6. 在NetWare中安装MySQL 2.7....

    MYSQL中文手册

    2.3.14. 在Windows环境下对MySQL安装的故障诊断与排除 2.3.15. 在Windows下升级MySQL 2.3.16. Windows版MySQL同Unix版MySQL对比 2.4. 在Linux下安装MySQL 2.5.在Mac OS X中安装MySQL 2.6. 在NetWare中安装MySQL...

    MySQL 5.1官方简体中文参考手册

    2.3.14. 在Windows环境下对MySQL安装的故障诊断与排除 2.3.15. 在Windows下升级MySQL 2.3.16. Windows版MySQL同Unix版MySQL对比 2.4. 在Linux下安装MySQL 2.5.在Mac OS X中安装MySQL 2.6. 在NetWare中安装MySQL ...

    MySQL中文参考手册.chm

    5.1 MySQL对ANSI SQL92 的扩充 5.2 以ANSI模式运行 MySQL 5.3 MySQL相比ANSI SQL92的差别 5.4 MySQL 缺乏的功能 5.4.1 子选择(Sub-selects) 5.4.2 SELECT INTO TABLE 5.4.3 事务...

    mysql官方中文参考手册

    2.3.14. 在Windows环境下对MySQL安装的故障诊断与排除 2.3.15. 在Windows下升级MySQL 2.3.16. Windows版MySQL同Unix版MySQL对比 2.4. 在Linux下安装MySQL 2.5.在Mac OS X中安装MySQL 2.6. 在NetWare中安装MySQL 2.7....

    MySQL5.1参考手册官方简体中文版

    北京万里开源软件有限公司在全国范围提供MySQL产品相关的商务及 技术方面的咨询与支持服务。垂询请致电:8610-65694500,或发送邮件至:sales@greatlinux.com. 本手册编译于2006-7-29,目录及索引由官方HTML文档...

    mysql5.1中文手册

    MySQL与标准SQL的差别 1.8.6. MySQL处理约束的方式 2. 安装MySQL 2.1. 一般安装问题 2.1.1. MySQL支持的操作系统 2.1.2. 选择要安装的MySQL分发版 2.1.3. 怎样获得MySQL 2.1.4. 通过MD5校验和...

    mysql面试题.docx

    18. 单表恢复:`mysql -u username -p db_name &lt; backup.sql --skip-lock-tables --single-transaction` 19. 主从复制原理涉及 Binlog 传输,配置包括设置主库日志、复制用户、复制参数,然后在从库上启动复制。 20....

    MySQL status解读.zip_MYSQL

    7. **Innodb_row_lock_waits** 和 **Innodb_row_lock_time_avg**:分别表示行锁等待次数和平均等待时间,过多的等待可能意味着并发控制问题。 8. **Slow_queries**:执行时间超过long_query_time秒的慢查询数量,...

    mysql语法文档

    mysql语法文档 ... * my_ulonglong mysql_affected_rows(MYSQL *mysql):返回最后一个update、delete、insert操作影响的记录数 * my_ulonglong mysql_num_rows(MYSQL_RES *res):返回查询结果的行数

    MySQL 全局锁、表级锁、行级锁

    FOR UPDATE` 或 `UPDATE/DELETE`)则会阻止其他事务读取和写入该表,直到锁被释放。 - 表级锁的优缺点:锁定粒度大,导致锁冲突的可能性较高,但锁定和解锁速度快,适合于锁定操作较少、数据争用不激烈的情况。 3...

Global site tag (gtag.js) - Google Analytics