【问题标题】:MySQL query not returning newly inserted recordMySQL查询不返回新插入的记录
【发布时间】:2011-03-14 21:00:44
【问题描述】:

我们在新插入的记录中随机看到此行为,并且仅在生产数据库(Amazon 的 RDS)上。看起来与死锁有关...(未报告错误)

受影响的表是 InnoDB,payment_id 是自动递增的,所有交易结束时间都是毫秒级的。所有连接都在同一台服务器上,启用了自动提交并且没有复制(就亚马逊的文档而言)。

连接 #1:

2011-03-07 14:09:54 INSERT INTO Payments SET payment_transaction = 'XYZ'

连接 #2:

2011-03-07 14:10:06: SELECT * FROM payment WHERE payment_transaction = 'XYZ' LIMIT 0, 1

响应:空

2011-03-07 14:10:06: SELECT * FROM payment ORDER BY payment_id DESC LIMIT 0, 1

响应:[payment_id] => 26242,[payment_transaction] => ABC

2011-03-07 14:50:06: SELECT * FROM payment WHERE payment_transaction = 'XYZ' LIMIT 0, 1

响应:[payment_id] => 26243,[payment_transaction] => XYZ

【问题讨论】:

  • 你期待会发生什么?
  • 数据库是否使用复制?是否连接到同一台服务器?
  • (单个)数据库在 Amazon 的 RDS 上运行,根据他们的文档,不涉及复制。
  • 第二个查询和最后一个查询(相同)应该返回相同的结果。
  • 输入时检查空格,这可能是不同的

标签: php mysql innodb


【解决方案1】:

这取决于你使用什么函数,如果你了解的话,要查看 SELECT 指令使用 mysql_num_rows() 影响了多少行,请使用 mysql_affected_rows() 和 DELETE,根据this 更新 qnd INSERT 指令。

【讨论】:

    【解决方案2】:

    通过向应用程序添加一些调试点,我注意到这些(随机有问题的)INSERT 实际上需要大约 50 多秒才能完成(与日志所说的相反)。因此,对于遇到此问题的任何人,请确保在应用程序环境中对 INSERT 的开始和结束时间进行基准测试。

    【讨论】:

      猜你喜欢
      • 2020-07-19
      • 2017-03-03
      • 1970-01-01
      • 2011-11-27
      • 1970-01-01
      • 1970-01-01
      • 2012-12-16
      • 1970-01-01
      • 2013-10-31
      相关资源
      最近更新 更多