使用内连接更新时SQL查询超时?

时间:2013-10-24 21:05:41

标签: mysql mysql-error-1205

当我尝试在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);

2 个答案:

答案 0 :(得分:0)

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

SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED

答案 1 :(得分:0)

好的......对我有意思...... 正如我告诉你的那样,我的SQL数据库是来自ms access db的一个副本...不知道发生了什么,但是mysql数据库表没有主键或索引虽然原始数据库已经拥有它们...我尝试了PK和索引,但是mysql给我的错误,我的最终解决方案是

  • 删除mysql中的表格
  • 确保PK在表结构中是对齐的(在我的情况下,在之后 从MS-Access导入,我必须再次执行此操作)
  • 检查已编入索引的字段(我有一个字段已编入索引),并确保索引存在

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

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