2024-06-16 11:43:45 发布
网友
我需要运行多个会话来选择MySQL中的行。在每个会话中,我首先用flag=0选择许多行。之后,我为这些行设置flag=1。 同时,我运行另一个会话(或多个会话),执行相同的操作。但是,我担心一个会议的选择可能会与其他会议产生冲突。 我能做些什么来避免这场冲突吗?在
flag=0
flag=1
我使用Python和Django框架编程。Python或Django是否有类似“synchronization”的命令来确保这两个会话不发生冲突?在
这种多会话协调不是客户端语言的功能,而是DBMS的功能。选择行FOR UPDATE,然后更新它们并提交事务。在
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,一次处理一行。但它应该可以处理多行。在
这种多会话协调不是客户端语言的功能,而是DBMS的功能。选择行
FOR UPDATE
,然后更新它们并提交事务。在要使其工作,您的表需要使用InnoDB(或XtraDB)引擎。MyISAM做不到。在
你的操作将是这样的:
如果我这样做,我会考虑使用limit1,一次处理一行。但它应该可以处理多行。在
相关问题 更多 >
编程相关推荐