0

我需要为排队系统使用一张桌子。该表将不断更新。

例如,我网站上的多个用户将添加他们的文件以进行处理,我听说当多个用户同时发生更新时,表格变得无响应或类似的东西。

那么在这种情况下我需要锁定表吗?如何对 mysql 表应用锁?

4

3 回答 3

2

不断更新是指每秒将追加 10,000 次吗?即使对于中端服务器,这仍然提供每秒 10,000 个机会让其他用户共享该表。

只有当多个依赖操作需要作为一个单元发生时,才需要锁定表。在大多数情况下,将一系列操作包含在数据库事务中就足够了。如果只是“不断更新” insert sometable values ( ...),那么保证事务一致性就很容易了。

于 2010-01-03T20:47:22.710 回答
1

那么在这种情况下我需要锁定表吗?

所有表都可以锁定,没有特殊类型的表。也就是说,当你遇到死锁时处理这个问题。 隔离级别也是一个密切相关的话题。

如何对 mysql 表应用锁?

LOCK TABLES 语法-本文介绍了如何以及为什么要锁定表。

于 2010-01-03T20:45:18.660 回答
0

当您一次执行多个更新时,您可能会陷入僵局。诸如 InnoDB 之类的引擎会检测到这一点并使您的一个事务失败(您可以重试,但只能重试整个事务)。

您可以通过表锁定来避免这种情况,但它会降低并发性。

诸如 MyISAM 之类的引擎(无论如何都不支持 MVCC 或事务)无论如何都会隐式使用表锁定。这种表锁只在查询期间存在;在不再需要表格后,它们会很快自动释放(不一定尽快,但很快)

我建议你不要使用 LOCK TABLE ,除非你觉得你真的需要;如果遇到死锁,请重试事务。

于 2010-01-03T22:16:08.333 回答