【问题标题】:What happens when multiple users try to change the same data at the same time in a website's MySQL database?当多个用户尝试同时更改网站的 MySQL 数据库中的相同数据时会发生什么?
【发布时间】:2015-01-30 05:07:46
【问题描述】:

假设一个 PHP 脚本将一些文本附加到 MySQL 数据库中已经存在的数据中。假设现有数据是abc。现在一个用户想要附加123,而另一个用户想要附加xyz。他们两个同时运行脚本。谁将首先附加?最终结果会是abc123xyz 还是abcxyz123

在更糟糕的情况下,假设脚本首先获取数据,将给定的文本附加到其中,然后替换数据库中的旧数据。那么谁的变化会在这里“幸存”下来呢?结果会是abc123 还是abcxyz

对不起,如果之前有人问过。

【问题讨论】:

  • 何不自己尝试一下,看看会发生什么?
  • @symbolicConstant 如何模拟多个用户同时做某事?这主要是理论上的,但可能发生在拥有大量用户的网站中。即使我以某种方式模拟它,我仍然需要知道解释:)

标签: php mysql runtime


【解决方案1】:

取决于您使用的引擎。对于 InnoDB,MySQL 仅对写入执行行级锁定。 使用查询访问数据库会有微小的差异

它将执行第一个查询。然后它将执行第二个查询 因此数据将是 123abc 或 123xyz,具体取决于首先执行的查询。

【讨论】:

  • 因此,理论上如果 2 个脚本在完全相同的服务器时间(达到纳秒甚至更准确)运行相同的更新查询(但有不同的修改),即使这样也会有一个队列和一个查询将首先运行,然后是下一个,对吗?
  • 据我所知正确。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-23
  • 2013-08-05
  • 1970-01-01
  • 2014-04-19
  • 2014-08-28
  • 2016-08-12
相关资源
最近更新 更多