首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL:您是否必须明确说明必须锁定哪一行,或者INNODB是否知道这一点?

MySQL:您是否必须明确说明必须锁定哪一行,或者INNODB是否知道这一点?
EN

Stack Overflow用户
提问于 2013-04-04 14:45:03
回答 1查看 128关注 0票数 0

我知道INNODB有行级锁定。所以如果我这样做:

代码语言:javascript
复制
LOCK TABLES users WRITE
SELECT credits FROM users WHERE userid = 1;
UPDATE users SET credits = ([CREDITS] + 100) WHERE userid = 1;
UNLOCK TABLES

innoDB是否足够智能,可以只锁定第二行,或者为了只锁定该行,我还必须采取其他步骤吗?为什么innodb只知道在我的持续时间内锁定这个用户?它是否已经像应该的那样锁定在SELECT上?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-04 15:06:25

如果使用选项Engine = InnoDB创建表,则不需要自己锁定表,将创建一个InnoDB监视器。

代码语言:javascript
复制
CREATE TABLE t (i INT) ENGINE = InnoDB;

监视器自动锁定该表,但该锁不是针对单行的,InnoDB将针对操作/事务锁定孔表。

也许用户只想读取该表,他就获得了孔表上的s锁。同时,另一个用户也可以读取表,但是如果他想删除一行并请求x锁,他必须等待另一个用户,直到他释放了他的s锁。

MYSQL锁类型兼容性矩阵。

代码语言:javascript
复制
    X           IX            S          IS
X   Conflict    Conflict    Conflict    Conflict
IX  Conflict    Compatible  Conflict    Compatible
S   Conflict    Conflict    Compatible  Compatible
IS  Conflict    Compatible  Compatible  Compatible

请阅读mysql文档:

InnoDB监视器- http://dev.mysql.com/doc/refman/5.1/en/innodb-monitors.html

InnoDB锁定模式- http://dev.mysql.com/doc/refman/5.1/en/innodb-lock-modes.html

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15804264

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档