mysql - 扩展从数据库中获取数据的规模

标签 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 进行更新,并且在同一连接中,如果我获取 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/

相关文章:

mysql - 从多个表中按 ID 和时间分组进行选择

javascript - 按下按钮时传递值

mysql - SQL:查询多级分层表

mysql - 从两列中选择值并将它们连接到不同表上的列中

sql - 定义表关系后,SQL Server 2005 是否更快?

php - 更新查询留下空白值

python - python 中的 Mysql 命令产生 : SyntaxError: EOL while scanning string literal

mysql - Windows 8.1 64 位 Tomcat 7.0.53 上的 BIRT 4.3.2 给出错误 'Cannot open the connection for the driver: org.eclipse.birt.report.data.oda.jdbc. '

sql - 如何将要分隔的列表、数组或字符串作为参数传递给 redshift

mysql - 按赞成票-反对票对评论进行排序,确保没有投票的评论显示在否定上方