我有一个包含电子邮件列表和自动递增 ID 的表,在该表上完成索引。
CREATE TABLE EMAIL_LIST
(
ID int NOT NULL AUTO_INCREMENT,
email_ID varchar(255),
lastFetchedID int,
PRIMARY KEY (ID)
);
CREATE INDEX PIndex ON EMAIL_LIST (ID);
然后我有多台计算机唯一地获取 email_ID,这样做是为了扩展获取过程。 但要获取的 email_ID 是根据条件描述的。
SELECT lastFetchedID FROM EMAIL_LIST WHERE ID=1 FOR UPDATE; // say this is x;
UPDATE EMAIL_LIST SET lastFetchedID=lastFetchedID+100 WHERE ID=1;
SELECT email_ID FROM EMAIL_LIST WHERE ID>=x AND ID< x+100;
以便每台计算机都有一组不同的 email_ID
我只是想知道我是否使用 select 进行更新,并且在同一连接中,如果我获取 100 个 email_ID,整个事务的 ID=1 的行上是否会有排他锁?
实现这一目标的最佳方法是什么,计算机的数量可能会有所不同,所以我正在这样做。
最佳答案
来自http://dev.mysql.com/doc/refman/5.5/en/innodb-locks-set.html :
A locking read, an UPDATE, or a DELETE generally set record locks on every index record that is scanned in the processing of the SQL statement.
这意味着将在 id = 1
的行上设置锁定。
关于mysql - 扩展从数据库中获取数据的规模,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20819470/