【问题标题】:Is there a concurrency with UPDATE count=count+1?UPDATE count=count+1 有并发吗?
【发布时间】:2009-06-09 18:33:16
【问题描述】:

我想知道,我会遇到任何并发问题吗?

这不在交易中。此代码适用于Sqlite(prototype),但我计划将其与 MySql 或 MS 的 SQL 一起使用

                command.CommandText =
                    "UPDATE tag_name SET count = count+1 "+
                    "WHERE tagid=@tagid";
                command.Parameters.Add("@tagid", DbType.Int64).Value = tagId;
                command.ExecuteNonQuery();

【问题讨论】:

  • 请注意不要在 WHERE 子句中引用计数。否则你可能会遇到自己的“万圣节问题”(en.wikipedia.org/wiki/Halloween_Problem
  • +1 用于提及万圣节问题。我毫不怀疑,如果你没有提到它,我会遇到这个问题并且整天(或一周!)+1000 如果可以的话,我会遇到这个问题并且想知道/抱怨这个问题 :)
  • 我希望我的错误都不会出现在维基百科中!

标签: sql database concurrency


【解决方案1】:

不,这应该不是问题。默认情况下,锁定机制应该处理单个语句中的任何并发问题。

【讨论】:

    【解决方案2】:

    我可能是错的,但我认为你不会有问题;我认为 tag_name 表在 UPDATE 发生时会被锁定,因此任何其他等待执行的更新基本上都会排队而不是同时发生。

    【讨论】:

      【解决方案3】:

      我不这么认为,我隐约记得在 Microsoft 的 SQL Server 最佳实践示例中看到过类似的内容。

      【讨论】:

        【解决方案4】:

        没问题无论如何你都会有隐式交易。所以应该没问题。

        即使您更改了 TRANSACTION ISOLATION LEVEL,它也应该可以正常工作,至少在 SQLServer 上是这样。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-11-21
          • 2011-02-12
          • 2012-04-13
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多