Mysql同时更新表

时间:2013-09-21 14:20:45

标签: mysql asynchronous synchronized

让我们说在mysql中,我想更新其中一个表中的列。我需要SELECT记录并更改值,然后将其更新回数据库。在某些情况下,我无法在一个sql查询中执行这两个操作并将它们嵌套到子查询中(由于mysql限制),我必须将其加载到程序中(比如Java),更改值,然后重新放入数据库中。

例如,程序A获取一个列的值,并希望用一个增加它,然后再将它放回去。同时,程序B也想做同样的事情。在程序A放回增加的值之前,程序B已经得到错误的值(程序B应该得到程序A增加的值,但它与程序A同时运行,因此它检索的值与一个)。

现在我的问题是,处理这类问题的好方法是什么?

我的另一个问题是,我认为mysql不应该是单线程系统,但是假设有两个相同的查询(它们正在更新同一个表,同一列和相同的记录)同时进入,mysql如何处理这种情况?哪一个mysql会先安排好,哪一个稍后安排?

此外,有人能解释一下mysql在多线程支持方面的工作原理吗?一个连接一个线程?那么在该连接下创建的所有语句都将在同一队列中进行调度?

1 个答案:

答案 0 :(得分:1)

如果您正在使用InnoDB,则可以使用事务来提供细粒度的互斥。

如果您正在使用MyISAM,则可以使用LOCK TABLE阻止B访问该表,直到A完成更改。

如果两个客户端同时尝试更新同一个字段,则无法预测哪个客户将赢得比赛。数据库具有内部互斥以序列化两个查询,但具体顺序基本上是随机的。

相关问题