Время ожидания запроса 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