Время ожидания запроса SQL при обновлении с использованием внутреннего соединения?

Этот запрос умирает, когда я пытаюсь выполнить его в коде 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 ответа

Решение

Хорошо... Интересно для меня... Как я уже говорил, моя база данных SQL была копией из базы данных ms access... Не знаю, что произошло, но у таблиц базы данных mysql нет первичного ключа или индекса, хотя они есть у оригинальной базы данных...Я пытался назначить PK и индексы, но MySQL вернул мне ошибку, мое окончательное решение было

  • Удалить таблицу в MySQL
  • Убедитесь, что PK назначен в табличных структурах (в моем случае после импорта из MS-Access я должен сделать это снова)
  • Проверьте индексированные поля (у меня есть одно индексированное поле) и убедитесь, что индекс существует

и это помогло мне, теперь тот же запрос работает нормально...

спасибо всем за помощь... Надежды Эти два шага могут помочь кому-то в будущем...

Выполните эту команду перед запуском UPDATE,

SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED
Другие вопросы по тегам