SELECT MAX(id) FROM table1 FOR UPDATE
- не блокирует строки, так как фактически не сканирует строки.Необходимая информация извлекается из индекса таблицы.
Это подсказка, если вы добавляете к запросу DESCRIBE
, отображая:
# id, select_type, table, type, possible_keys, key, key_len, ref, rows, Extra
'1', 'SIMPLE', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'Select tables optimized away'
SELECT id FROM table1 WHERE id = (SELECT MAX(id) FROM table1) FOR UPDATE
- заблокирует одна строка , которая соответствует MAX(id)
, поскольку вы явно извлекаете эту строку.
SELECT id FROM table1 ORDER BY id DESC LIMIT 1 FOR UPDATE
- заблокирует все строки и получит MAX(id)
, используя комбинацию ORDER BY
и LIMIT 1
.
Это снова будет объяснено запросом DESCRIBE
.