Без таблиц блокировки MySQL - PullRequest
2 голосов
/ 19 марта 2012

Я выполняю хранимую процедуру, которая включает в себя больше таблиц, помещенных в соединения. Моя хранимая процедура выполняет операции чтения таблиц INNODB и записи во временную таблицу, созданную таким образом

CREATE TEMPORARY TABLE IF NOT EXISTS tmpDate
(
dates TIMESTAMP,
values INT,
ids INT
);

и, наконец, операции UPDATE над столбцом таблицы (INNODB), в котором наверняка нет конфликтующих операций, потому что я выполняю только операции INSERT (SELECT и UPDATE только в этой StoredProcedure). *

Каждый раз, когда я запускаю его, я получаю следующее сообщение об ошибке:

Превышено время ожидания блокировки; попробуйте перезапустить транзакцию

Я сразу подумал, что это из-за удержания эксклюзивного замка . Вы знаете способ выполнения таблицы NO LOCK для хранимой процедуры или что-то, что позволит мне выполнить мой SP?

Ответы [ 2 ]

2 голосов
/ 21 марта 2012

Вы не должны создавать ВРЕМЕННЫЕ ТАБЛИЦЫ с InnoDB. Был прошлый отчет об ошибке на .

DROP TABLE IF EXISTS tmpDate;
CREATE TEMPORARY TABLE tmpDate 
( 
   date s TIMESTAMP, 
    values INT, 
    ids INT 
) ENGINE=MyISAM; 

Таблицы Tmp лучше всего использовать в качестве MyISAM, поскольку полные блокировки таблиц накладываются, но по своей природе неблокируют .

0 голосов
/ 21 марта 2012

Эта ошибка: "Lock wait timeout exceeded; try restarting transaction" это проблема с базой данных MySQL.Я перезапустил его, и моя хранимая процедура работает нормально.Я не нашел ответа, как не блокировать таблицу для полной процедуры хранения ....

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...