首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >要更新的行锁

要更新的行锁
EN

Stack Overflow用户
提问于 2011-02-12 03:45:20
回答 2查看 1.2K关注 0票数 2

我有innodb表被许多不同的实例读取(云)

每个实例中的守护进程需要100行来“执行”该表的操作,但我不希望2个(或更多)实例执行相同的操作。

所以我有一个“状态”列("todo",“So”,"done")。

实例1:它需要100行,其中status = "todo“...然后我需要尽快将这些行更新为状态“正在进行”,所以实例2,3,..x不能接受相同的行。

我该怎么做呢?

请,我希望解决方案不锁定整个表,但只锁定行(那是因为我使用innodb)……我读过很多关于这方面的文章(锁共享模式、更新、提交……)但我不明白正确的方法...

EN

回答 2

Stack Overflow用户

发布于 2011-02-12 03:51:17

您应该使用LOCK TABLES和UNLOCK TABLES函数来执行此操作:

http://dev.mysql.com/doc/refman/5.1/en/lock-tables.html

票数 0
EN

Stack Overflow用户

发布于 2011-02-14 16:58:34

使用事务,然后在读取记录时使用SELECT ... FOR UPDATE。这样,您读取的记录将被锁定。当您获得所有数据时,将记录更新为“to”并对事务执行COMMIT。也许您遗漏的是事务的使用,或者命令的正确顺序。下面是一个基本的例子:

代码语言:javascript
复制
BEGIN TRANSACTION;
SELECT * FROM table WHERE STATUS = 'todo' FOR UPDATE;

// Loop over results in code, save necessary data to array/list..

UPDATE table SET STATUS ='doing' WHERE ...;
COMMIT;

// process the data...

UPDATE table SET STATUS ='done' WHERE ...;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4973309

复制
相关文章

相似问题

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