Задавайте вопросы, мы ответим
Вы не зашли.
Приветствую всех.
Есть таблица InnoDB. Делаю специально обученного бота который должен каждую минуту копировать всю информацию из таблицы и после очищать ее, меня беспокоит, что будет если во время этой операции мы пошлем команду на запись в таблицу? Выборка и удаление должны выполняться друг за другом, в это время записывать нельзя, можно как-то это сделать?
p.s. мне достаточно последовательности операторов, а дальше я сам разберусь
Неактивен
Сделайте в начале бота блокировку таблицы
Неактивен
Классно, то что нужно, а транзакции я уже сам надыбал. Спасибо!
Неактивен
У меня еще один вопрос, что будет если при такой транзакции:
Неактивен
Тип клиента совершенно не важен - PHP, С или другой коннектор.
Вы не уточнили в какой момент вызван LOCK TABLES. Если транзакция уже начата, он будет ждать ее завершения до блокировки. Если наоборот, то транзакция будет ждать на первом запросе, обращающемся к заблокированной таблице.
Все это вы можете легко проверить подключившись двумя клиентами к MySQL и выполняя указанные вами команды.
Неактивен
Совершенно верно, спасибо за ответ.
Неактивен
Кстати синтаксис у вас не правильный
Надо так: LOCK TABLES orders WRITE, allorders WRITE
Неактивен
Что будет делать mysql в случае если специальный бот посылает команды:
Отредактированно septera (24.02.2011 11:27:00)
Неактивен
Если серверу при этом приедет пакет об обрыве соединения, то блокировки
пропадут сразу же. В противном случае — поток будет ждать wait_timeout
секунд и будет уничтожен после этого принудительно.
wait_timeout можно выставлять не только глобально, но и прямо для текущего
соединения: SET wait_timeout = 10. Учтите, что тогда через 10 секунд простоя,
соединение оборвется.
Неактивен
Спасибо, за как всегда полезную информацию.
Еще один небольшой вопрос.
Если мы вызываем BEGIN потом в течении 30 секунд будут INSERT и UPDATE потом COMMIT, то перед вызовом COMMIT остальные пользователи выбирая данные из задействованных таблиц будут ли видеть внесенные изменения или все изменения сначала записываются в журнал и не видны никому и только после COMMIT разом записываются в таблицы?
Неактивен
Это зависит от уровня изоляции читающих транзакций. По умолчанию исполь-
зуется REPEATABLE-READ (видят только примененные транзакции, завершенные
после начала текущей).
Неактивен
Спасибо, вот теперь все
Неактивен