我知道INNODB有行级锁定。所以,如果我这样做:
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上了?
答案 0 :(得分:1)
如果您创建表格,则无需自行锁定表格 使用Engine = InnoDB选项,将创建一个InnoDB监视器。
CREATE TABLE t (i INT) ENGINE = InnoDB;
监视器自动锁定表,但锁不是单行的InnoDB将锁定操作/事务的漏洞表。
也许用户只想阅读表格,他在洞穴表上获得了锁定。 同时另一个用户也可以读取该表,但如果他想删除一行并且他要求x锁,他必须等待另一个用户,直到他释放他的锁。
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 doc。:
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