Документация MySQL гласит:
LOCK TABLES не безопасен для транзакций
и неявно фиксирует любой активный
транзакция перед попыткой блокировки
таблицы.
Начало транзакции (например,
с START TRANSACTION) неявно
совершает любую текущую транзакцию и
освобождает существующие блокировки.
Но эти условия применяются к транзакционному движку (InnoDB). MyISAM не поддерживает транзакции в стиле InnoDB.
MyISAM имеет блокировки чтения (которые будут предотвращать запись из любых сеансов) и блокировки записи (которые предотвращают чтение и запись из других сеансов). Несколько сеансов могут получить блокировки чтения, но если один сеанс получает блокировку записи, ни один другой сеанс не может читать, блокировать или записывать в таблицу, пока установлена блокировка записи.
Я рекомендую вам ознакомиться с документацией по этой теме, а также с теми страницами, на которые есть ссылки в верхней части страницы, на которую я ссылаюсь. Извините, что ссылка ссылается на конкретный номер версии; Я не знаю независимого от версии способа ссылки на документацию MySQL.
Мне кажется, что вам нужно получить блокировку записи и выполнить чтение / запись, когда блокировка активна, затем отпустите ее и перейдите к следующему. Если вам нужно было сначала получить блокировку чтения, выполнить чтение, затем снять и получить блокировку записи, вы выставите условия гонки.