У меня есть запрос со следующей структурой:
SELECT ..... WHERE status = 'QUEUED' ORDER BY position ASC LIMIT 1 FOR UPDATE;
Это оператор SELECT с одной таблицей в таблице InnoDB. Поле position
(INT NOT NULL) имеет индекс на нем. статус - ENUM, а также индексируется.
SELECT ... FOR UPDATE
На странице руководства говорится, что он блокирует все прочитанные строки. Правильно ли я понимаю, что в этом случае только одна строка будет заблокирована? Скорее всего, он заблокирует всю таблицу?
Можно ли определить, какие строки будут заблокированы с помощью запроса EXPLAIN
? Если да - как? Объяснение для запроса в пустой таблице показывает следующее:
1;'SIMPLE';'job';'index';<null>;'index_position';[34,...];<null>;1;'Using where'