扩展从数据库中获取数据

时间:2013-12-28 21:16:37

标签: mysql sql

我有一个包含电子邮件列表和自动递增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 for update,并且在同一连接中,如果我获取100 email_ID,那么整个交易中ID = 1的行会有独占锁吗?

并且实现这一目标的最佳方式是什么,计算机的数量可能会有所不同,所以我这样做。

1 个答案:

答案 0 :(得分:0)

来自http://dev.mysql.com/doc/refman/5.5/en/innodb-locks-set.html

  

锁定读取,UPDATE或DELETE通常会在处理SQL语句时扫描的每个索引记录上设置记录锁定。

这意味着将在id = 1的行上设置锁定。