2013-10-24 4 views
0

Этот запрос умирает, когда я пытаюсь выполнить его в PHP-коде и в phpMyAdmin.Сбой запроса SQL при обновлении с использованием внутреннего соединения?

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); 
+1

Это не вопрос оптимизации ... Узнайте, почему вы получаете Lock Wait. –

+0

@RobertHarvey sql db не используется никаким другим приложением, я не открыл никаких записей об этом, его не использовали на какой-либо другой машине, не могу догадаться, что происходит –

ответ

0

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

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

и это сделал трюк для меня, сейчас тот же запрос работает нормально ...

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

0

Задайте эту команду перед запуском UPDATE.

SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED 
+0

с помощью codeIgnitor, как я могу это сделать? Я никогда не делал этого раньше –

Смежные вопросы