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

2024-06-16 11:43:45 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我使用Python和Django框架编程。Python或Django是否有类似“synchronization”的命令来确保这两个会话不发生冲突?在


Tags: django命令框架编程mysql会议flagsynchronization
1条回答
网友
1楼 · 发布于 2024-06-16 11:43:45

这种多会话协调不是客户端语言的功能,而是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;

如果我这样做,我会考虑使用limit1,一次处理一行。但它应该可以处理多行。在

相关问题 更多 >