我需要为排队系统使用一张桌子。该表将不断更新。
例如,我网站上的多个用户将添加他们的文件以进行处理,我听说当多个用户同时发生更新时,表格变得无响应或类似的东西。
那么在这种情况下我需要锁定表吗?如何对 mysql 表应用锁?
我需要为排队系统使用一张桌子。该表将不断更新。
例如,我网站上的多个用户将添加他们的文件以进行处理,我听说当多个用户同时发生更新时,表格变得无响应或类似的东西。
那么在这种情况下我需要锁定表吗?如何对 mysql 表应用锁?
不断更新是指每秒将追加 10,000 次吗?即使对于中端服务器,这仍然提供每秒 10,000 个机会让其他用户共享该表。
只有当多个依赖操作需要作为一个单元发生时,才需要锁定表。在大多数情况下,将一系列操作包含在数据库事务中就足够了。如果只是“不断更新” insert sometable values ( ...)
,那么保证事务一致性就很容易了。
那么在这种情况下我需要锁定表吗?
所有表都可以锁定,没有特殊类型的表。也就是说,当你遇到死锁时处理这个问题。 隔离级别也是一个密切相关的话题。
如何对 mysql 表应用锁?
有LOCK TABLES 语法-本文介绍了如何以及为什么要锁定表。
当您一次执行多个更新时,您可能会陷入僵局。诸如 InnoDB 之类的引擎会检测到这一点并使您的一个事务失败(您可以重试,但只能重试整个事务)。
您可以通过表锁定来避免这种情况,但它会降低并发性。
诸如 MyISAM 之类的引擎(无论如何都不支持 MVCC 或事务)无论如何都会隐式使用表锁定。这种表锁只在查询期间存在;在不再需要表格后,它们会很快自动释放(不一定尽快,但很快)
我建议你不要使用 LOCK TABLE ,除非你觉得你真的需要;如果遇到死锁,请重试事务。