`

mysql的行锁与表锁。(select* .... FOR UPDATE)

    博客分类:
  • SQL
阅读更多

mysql中使用select for update的必须针对InnoDb,并且是在一个事务中,才能起作用。

select的条件不一样,采用的是行级锁还是表级锁也不一样。
http://www.neo.com.tw/archives/900 的说明

由於 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 * FROM user WHERE id = 1 FOR UPDATE; ``` 2. **表锁(Table Locks)** 表锁是在整个表级别施加的锁,开销较小,加锁速度快,不会出现死锁。但是,由于锁定的粒度大,表锁会导致较高的锁冲突概率和较低...

    全局锁、表锁、行锁.doc

    行锁在UPDATE、DELETE和SELECT ... FOR UPDATE语句中自动应用。此外,InnoDB还支持意向锁(Intention Locks),为表级操作提供预判,如意向共享锁(IS锁)和意向排他锁(IX锁),它们不会阻塞其他行级别的S锁和X锁。 元...

    MySQL中级面试题汇总

    FOR UPDATE和SELECT ... LOCK IN SHARE MODE来实现读写锁。 - 行锁是基于索引来实现的,如果查询条件没有命中索引,可能会导致全表锁。 3. **MySQL权限相关表**: - mysql.user、mysql.db、mysql.tables_priv、...

    Mysql 锁机制的详细说明

    - 按照锁的粒度:行锁、表锁、页锁(MySQL 中最常见的为行锁和表锁) - 按照锁的使用方式:共享锁(读锁)、排他锁(写锁) 2. 概念: - 行锁:只锁定单个数据行,允许其他事务同时读取同一表的其他行,减少了锁...

    mysql高频面试题及答案

    FOR UPDATE`会锁定符合条件的行。如果WHERE子句中的条件是索引字段,将只锁定相关行,否则可能升级为表锁。 3. **MySQL权限相关的表:** - `user`表存储用户账户信息。 - `db`表定义用户对特定数据库的访问权限...

    MySQL初级与高级教程

    - 锁类型:行锁、表锁。 - 锁模式:共享锁、排他锁。 - 死锁处理:超时等待、循环等待检测。 6. **性能优化** - 查询优化:使用EXPLAIN分析查询计划。 - 索引优化:选择合适的索引类型,避免全表扫描。 - ...

    mysql入门到高级.docx

    同时,对比了MyISAM和InnoDB两大存储引擎的特性,MyISAM注重性能,适合SELECT操作,支持表锁;InnoDB则提供事务处理,支持行锁,适用于大量INSERT和UPDATE操作。 2. **MySQL 日常操作命令**:这部分内容详细介绍了...

    数据库面试基础知识.docx

    17. **行锁和表锁的区别** - **行锁**:锁定具体的行,减少锁争用,适用于事务处理。 - **表锁**:锁定整个表,可能会导致更多的锁等待。 18. **数据库隔离级别是什么?有什么作用?** - **隔离级别**:控制事务...

    mysql面试题50道和答案.docx

    for update 可以根据条件来完成行锁锁定,并且 id 是有索引键的列,如果 id 不是索引键那么 InnoDB 将完成表锁。 优化锁的方法 9. 你知道哪些优化锁的方法?优化锁的方法包括读写分离、分段加锁、减少锁持有的...

    MySQL的InnoDB中的各种锁是怎么工作的

    5. **行锁与表锁的冲突与兼容性**: - 意向锁(IS和IX)的存在减少了判断行锁冲突的时间,因为它们提供了事务对行级锁需求的提前声明。 - 不同类型的意向锁之间不会发生冲突,而意向锁与行级锁之间会根据共享和...

    mysql MySQL数据库开发优化与管理维护

    ### MySQL数据库开发优化与管理维护 #### 概览 本文档深入探讨了MySQL数据库的各个方面,包括开发、优化以及管理维护等内容。文档分为两大部分:第一部分主要关注于数据库的开发,介绍了如何选择合适的存储引擎、...

    MySQL数据库-事务、锁及SQL优化

    MySQL数据库的事务、锁以及SQL优化是数据库管理中至关重要的概念,它们对于数据一致性、并发控制和系统性能有着直接影响。 1. **事务**:事务是数据库操作的基本单元,确保一系列数据库操作要么全部成功,要么全部...

    MySQL锁(表锁,行锁,共享锁,排它锁,间隙锁)使用详解

    本文主要讨论了MySQL中的五种锁:表锁、行锁、共享锁、排它锁和间隙锁。 1. 表锁:表锁是MySQL中最基础的锁类型,主要在MyISAM存储引擎中使用。表锁分为两种模式:读锁(Table Read Lock)和写锁(Table Write Lock...

    MySQL技术资料来自网易的经验总结

    - **查询优先还是更新(INSERT、UPDATE、DELETE)优先**:分析查询与更新操作之间的优先级问题。 - **使用SQL提示**:介绍SQL提示的使用方法。 **第十二章:优化数据库对象** - **优化表的数据类型**:探讨如何...

    MySQL数据库开发、优化与管理维护.pdf

    ### MySQL数据库开发、优化与管理维护 #### 一、开发篇 ##### 第1章 帮助的使用 - **按照层次看帮助**:在MySQL中,帮助文档被组织成不同的层级,用户可以根据需要深入到特定的主题或命令来获取详细信息。 - **...

    笔记-MySQL.pdf

    7. **MySQL中的锁**:MySQL中的锁机制包括表锁、行锁、页锁等,了解锁的类型、使用场景和冲突解决策略,可以减少并发操作中的数据竞争。 8. **版本差异**:虽然课程以MySQL 5.7.32为例,但大部分内容同样适用于...

Global site tag (gtag.js) - Google Analytics