在多个会话中更新/选择mysql表

时间:2013-07-05 20:43:22

标签: python mysql django synchronization

我需要运行多个会话来选择MySQL中的行。在每个会话中,我首先使用flag=0选择多个行。之后,我为这些行设置了flag=1。 同时,我运行另一个会话(或更多会话),它执行相同的操作。但是,我担心一次会议的选择可能会与其他会议产生冲突。 我能做些什么来避免这种冲突吗?

我使用Python编程并使用Django框架。 Python或Django是否有像“同步”这样的命令来确保这两个会话不冲突?

1 个答案:

答案 0 :(得分:0)

这种多会话协调不是客户语言的功能;它是DBMS的一个功能。您选择行FOR UPDATE,然后更新它们并执行您的交易。

要使其工作,您的表需要使用InnoDB(或XtraDB)引擎。 MyISAM无法做到。

您的操作将如下工作:

 START TRANSACTION /* this may have its own function call */

 SELECT id, whatever 
   FROM table
  WHERE flag = 0
  LIMIT 10
    FOR UPDATE;

 /* do what you need to do with each row selected */

 UPDATE table SET flag  = 1 WHERE ID = ?id

 COMMIT;

如果我这样做,我会考虑使用LIMIT 1并一次处理一行。但它应该适用于多行。