我需要使用表格来排队系统。该表将不断更新。
例如,我网站上的多个用户会添加他们的文件进行处理,我听说当多个用户同时进行更新时,表格会变得没有响应或类似的情况。
在这种情况下我需要锁定表吗?我如何将锁应用于mysql表?
答案 0 :(得分:2)
通过不断更新是否意味着每秒会附加10,000次?即使对于中端服务器,每秒仍有10,000个机会可供其他用户共享。
当需要作为一个单元进行多个相关操作时,才需要锁定表。在大多数情况下,将一系列操作包含在数据库事务中就足够了。如果“常量更新”仅仅是insert sometable values ( ...)
,那么很容易保证事务的一致性。
答案 1 :(得分:1)
在这种情况下我需要锁定表吗?
所有表都可以锁定,没有特殊类型的表。也就是说,当遇到死锁时处理问题。 Isolation levels也是一个密切相关的话题。
如何将锁应用于mysql表?
LOCK TABLES syntax - this article涵盖&为什么你想要锁定表。
答案 2 :(得分:0)
当您一次执行多个更新时,您可能会遇到死锁情况。像InnoDB这样的引擎会检测到这一点并使您的某个事务失败(您可以重试,但只能进行整个事务)。
您可以通过表锁定来避免这种情况,但它会降低并发性。
MyISAM(不支持MVCC或事务)等引擎无论如何都会隐式使用表锁定。此类表锁仅在查询期间存在;在不再需要桌子后(不一定尽快,但很快),它们会很快自动发布。
我建议你不要使用LOCK TABLE,除非你觉得你真的需要;如果遇到死锁,请重试该事务。