Mysql 在并发时增加相同的计数器
我有大约500个线程,循环可以并发工作。我想在每个循环上增加一个计数器 循环中的最后一行:Mysql 在并发时增加相同的计数器,mysql,concurrent-programming,Mysql,Concurrent Programming,我有大约500个线程,循环可以并发工作。我想在每个循环上增加一个计数器 循环中的最后一行: update counter_tbl set counter=counter+1 where id = 5; 是否可能至少两个线程拾取一个计数器的值并将其增加到相同的值 例如,计数器为50,两个线程正好同时拾取50并将其增加,因此thread1将计数器更新为51,而thread2将计数器再次更新为51。因此,我们将错过一个增量。这可能吗?如果是,如何避免 我可以使用锁表,但由于它的成本,我想避免它。实际
update counter_tbl set counter=counter+1 where id = 5;
是否可能至少两个线程拾取一个计数器的值并将其增加到相同的值
例如,计数器
为50,两个线程正好同时拾取50并将其增加,因此thread1将计数器
更新为51,而thread2将计数器
再次更新为51。因此,我们将错过一个增量。这可能吗?如果是,如何避免
我可以使用锁表
,但由于它的成本,我想避免它。实际上这是不可能的,因为这些是更新语句,将在事务中运行
只有当您有一个由两个或更多语句组成的事务时,才需要锁定表。您不必使用锁定表。每个事务的数据库服务器都是一致的。在这种情况下,您的查询是一个事务,当两个线程尝试更新同一记录时,数据库服务器将处理并发性。如果可能,事务将按到达顺序(或服务器确定的任何顺序)执行,否则将发生死锁(在这种情况下,您可以在特定场景中安全地重新发送事务!)