Ваше описание является точным.
Вероятно, ваша самая большая проблема на данный момент состоит в том, чтобы понять непроцедурную природу SQL.На этом языке вы не указываете шаги, необходимые для достижения результата, вы описываете только тот результат, который вам нужен.
Таким образом, оператор SQL, который вы использовали выше, вы хотите, чтобы id
увеличилось на единицу для каждой строкив таблице.Если база данных делает это, выполняя цикл внутренне или с помощью стихийного бедствия, это не ваша основная задача.
Поначалу это странно для многих процедурных программистов, но это делает жизнь лучше, когда вы привыкнете к ней: вам не нужно знать все внутренности базы данных, чтобы найти лучший способ обработки запроса.Оптимизатор сделает это за вас, и обычно лучше, чем вы могли бы сделать это самостоятельно.
Конечно, любопытно узнать, как обрабатывается запрос внутри.Для этого вы используете оператор EXPLAIN
.Это особенно необходимо для анализа и устранения проблем с производительностью.
Практическое правило состоит в том, что обычно лучше выполнять как можно большую часть работы в одном большом операторе SQL, чем во многих простых небольших, связанных вместе скод приложения.Это связано с тем, что таким образом меньше накладных расходов, а также потому, что большее выражение часто открывает больше возможностей для оптимизатора.Например, вложенные циклы - это самый простой, но не всегда лучший способ решения проблемы.