подготовленный запрос
Sign in to saveAlso known as parameterized statement, ps
возможность предварительной компиляции кода SQL
Wikidata facts
- Part of
- SQL
Show 1 more fact
- Stack Exchange tag
- stackoverflow.com/tags/prepared-statement
via Wikidata · CC0
Article · Русский
В системах управления базами данных подготовленный запрос или параметризованный запрос — это предоставляемая СУБД возможность предварительной компиляции кода SQL, отделённого от данных. Преимущества подготовленных запросов: * эффективность, вытекающая из того, что их можно использовать повторно без повторной компиляции; * безопасность. Их использование уменьшает или устраняет возможность атаки путём SQL-инъекции. Подготовленный оператор фактически является предварительно скомпилированным шаблоном, в который подставляются постоянные значения во время каждого выполнения, и обычно используются такие операторы SQL DML, такие как INSERT, SELECT или UPDATE. Обычная последовательность использования подготовленных операторов: * Подготовка: приложение создает шаблон запроса и отправляет его в СУБД. Некоторые значения остаются неуказанными, они называются параметрами, заполнителями или переменными связывания (обозначены ниже как «?»):INSERT INTO products (name, price) VALUES (?, ?); * Компиляция: СУБД компилирует (анализирует, оптимизирует и транслирует) шаблон запроса и сохраняет результат, не выполняя его. * Выполнение: приложение предоставляет (или привязывает) значения для параметров шаблона оператора, а СУБД выполняет оператор (возможно, возвращая результат). Приложение может запросить у СУБД многократное выполнение оператора с разными значениями. В приведенном выше примере приложение может предоставить значения «велосипед» для первого параметра и «10900» для второго параметра, а затем значения «обувь» и «7400». Альтернативой подготовленному запросу является вызов SQL непосредственно из исходного кода приложения таким образом, чтобы сочетались код и данные. Прямой эквивалент приведенному выше примеру: INSERT INTO products (name, price) VALUES ("bike", "10900"); Не все оптимизации могут быть выполнены во время компиляции шаблона оператора по двум причинам: лучший план запроса может зависеть от конкретных значений параметров, и лучший план запроса может меняться с течением времени из-за изменения таблиц и индексов. Когда и если подготовленный запрос выполняется только один раз, он будет выполняться медленнее из-за дополнительного обращения к серверу. Ограничения реализации также могут привести к снижению производительности; например, некоторые версии MySQL не кэшировали результаты подготовленных запросов. Хранимые процедуры, которые также предварительно компилируются и сохраняются на сервере для последующего выполнения, обладают аналогичными преимуществами. В отличие от хранимых процедур, подготовленный запрос обычно не пишется на процедурном языке и не может использовать или изменять переменные или использовать структуры потока управления, полагаясь вместо этого на декларативный язык запросов к базе данных. Благодаря своей простоте и возможности эмуляции на стороне клиента (если целевая СУБД их не поддерживает) подготовленные запросы более переносимы между различными СУБД, чем хранимые процедуры.
Abstract from DBpedia / Wikipedia · CC BY-SA