Быстрое объяснение, необходимое для блокировки строк в InnoDB

У меня есть клиент-серверное приложение с 2 клиентами:

Мне нужно сделать чтение базы данных эффективным, когда его читает более 1 клиента, и все клиенты не получают одинаковые строки. Я использую движок InnoDB для таблиц, я делаю запросы как SELECT...FOR UPDATE и я не использую SHARED MODE

Мне нужно объяснение того, как процесс ведет себя в следующих сценариях:

  1. У меня есть 30 строк в таблице. Каждый клиент имеет один объект подключения к базе данных
  2. Клиент А получает 15 строк с SELECT ...FOR UPDATE, Предполагается, что эти строки заблокированы.
  3. Клиент B должен получить остальные 15 строк, которые не заблокированы Клиентом A, с SELECT ..FOR UPDATE соответственно.

Когда я тестировал этот сценарий, у меня был Клиент B, получивший также 15 рядов Клиента A. Почему это происходит? Я поставил setAutoCommit(false) и никогда не делаю COMMIT или же ROLLBACK запрос, поэтому соединение никогда не фиксирует, и блокировки, которые (например, сделал клиент A) были установлены, никогда не освобождаются.

Может ли кто-нибудь указать мне правильное направление? Что я делаю не так?

1 ответ

Решение

Я запутался, ты пытаешься заблокировать 15 рядов или нет? Если вы есть, то вам не хватает:

START TRANSACTION

Вот ссылка на документацию по транзакции:

http://dev.mysql.com/doc/refman/5.0/en/ansi-diff-transactions.html

Другие вопросы по тегам