【问题标题】:SQL query times out when updating using inner join?使用内部联接更新时 SQL 查询超时?
【发布时间】:2013-11-03 19:01:48
【问题描述】:

当我尝试在 PHP 代码和 phpMyAdmin 中执行此查询时,该查询将终止。

UPDATE Inventory 
INNER JOIN InventorySuppliers 
ON Inventory.LocalSKU = InventorySuppliers.LocalSKU 
SET Inventory.Integer2 = '1' 
WHERE InventorySuppliers.SupplierSKU = '2D4027A6'

错误是:

1205 - 超过锁定等待超时;尝试重启事务

如何防止锁定超时和/或解决此问题?

我可以在 Microsoft Access 中正确运行此查询,而 phpMyAdmin db 是该 Access 数据库的副本。增加执行时间对我来说不是一种选择,因为更新一条记录需要很长时间。

$data1 = array('Inventory.Integer2'=>$shipping);

$this->db->where('InventorySuppliers.SupplierSKU', $SupplierSKU);
$this->db->update('Inventory inner join InventorySuppliers  on Inventory.LocalSKU = InventorySuppliers.LocalSKU', $data1);
$this->db->close();
return ($this->db->affected_rows() > 0);

【问题讨论】:

  • 这不是优化问题...找出为什么会出现锁定等待。
  • @RobertHarvey sql db 没有被任何其他应用程序使用,我没有打开它的任何记录,它没有在任何其他机器上使用,无法猜测发生了什么

标签: mysql mysql-error-1205


【解决方案1】:

在运行 UPDATE 之前发出此命令。

SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED

【讨论】:

    【解决方案2】:

    好吧...对我来说很有趣... 正如我告诉你的,我的 SQL 数据库是 ms access db 的副本...不知道发生了什么,但是 mysql 数据库表没有主键或索引,尽管原始数据库有它们...我尝试分配 PK 和索引,但是mysql返回错误,我的最终解决方案是

    • 删除mysql中的表
    • 确保 PK 在表结构中分配(在我的情况下,在 从 MS-Access 导入,我必须再做一次)
    • 检查索引字段(我有一个字段索引),并确保索引存在

    这对我有用,现在相同的查询运行正常...

    感谢大家的帮助...希望这两个步骤将来可能对某人有所帮助...

    【讨论】:

      猜你喜欢
      • 2015-08-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-15
      • 1970-01-01
      • 2011-04-21
      • 1970-01-01
      • 1970-01-01
      • 2012-03-24
      相关资源
      最近更新 更多