Збережені процедури

Часто при виконанні рутинних операцій потрібно здійснювати послідовність однакових запитів. Збережені процедури дозволяють об'єднати послідовність таких запитів і зберегти їх на сервері. Після цього клієнтам не доведеться посилати серверу послідовність запитів, достатньо надіслати один запит на виконання збереженої процедури.

Зауваження:

Збережені процедури з'явилися в СКБД MySQL, починаючи з версії 5.0.0.

Збережені процедури мають наведені далі переваги.

  • Повторне використання коду - після того, як процедура, створена, її можна викликати з будь-яких додатків і SQL-запитів, більше не потрібно щоразу програмувати одні й ті самі дії, завдяки чому зменшується ризик проникнення у додатки помилок і зменшується час розробки програми.
  • Скорочення мережевого трафіку-при використанні збережених процедур замість того, щоб відсилати по мережі кожен запит і отримати на кожен із запитів відповідь, набагато економніше послати серверу запит на виконання збереженої процедури і відразу отримати відповідь.
  • Безпека-збережені процедури використовуються для всіх стандартних банківських операцій. Процедура гарантує, що послідовність дій буде узгодженою і не призведе до порушення цілісності даних через те, що один оператор не буде виконаний. Крім того, для виконання збереженої процедури користувач повинен мати відповідний привілей. При цьому прав доступу до таблиць мати зовсім не обов'язково. Таким чином, адміністратор бази даних отримує більш широкі можливості у плані захисту даних і управління доступом користувачів до об'єктів бази даних.
  • Простота доступу-основним імперативом розробки програмного забезпечення проголошено зменшення складності коду. Збережені процедури дозволяють інкапсулювати складний код і оформити його у вигляді простого виклику з осмисленим ім'ям. При створенні нового каталогу набагато простіше оперувати процедурою create_new_catalog (), ніж кількома операторами незрозумілого призначення. При реєстрації угоди, що вимагає пошуку в таблицях catalogs products, users, і редагуванні таблиць orders і users набагато простіше оформити послідовність SQL-операторів для оформлення угоди у збережену процедуру ordering (). Навіть якщо послідовність операторів добре знайома програмісту, застосування процедур дозволяє перейти на більш високий рівень абстракції і оперувати не таблицями, а сутностями реально го світу, такими як угода, каталог продукція та ін..
  • Виконання ділової логіки - збережені процедури можуть виконувати перевірку умов виконання замовлення, наприклад, підраховуючи число товарних позицій на складі, і відхиляти замовлення у випадку, якщо його недостатньо. Це дозволяє перенести код збереження цілісності бази даних з прикладної програми на сервер бази даних. Так як прикладна програма може виконуватися на сотні машин мережі, а сервер, як правило, один, стійкість системи при переміщенні логіки на сервер різко зростає. Крім того, в цьому випадку легше змінити мову розробки зовнішнього застосування, тому що велика частина логіки оформлена у вигляді збережених процедур і не залежить від мови розробки програмного додатку.

Збережені процедури і привілеї

Починаючи з версії 5.0.3, СУБД MySQL вимагає від користувачів наявності наступних привілеїв при роботі з збереженими процедурами:

  • для створення збережених процедур необхідна наявність привілеї create routine;
  • Для редагування та видалення збереженої процедури необхідно наявність привілеї alter routine, користувач, який створює збережену процедуру, автоматично наділяється цим привілеєм;
  • для виклику процедури, що зберігається необхідна наявність привілеї execute, цей привілей також автоматично надається користувачеві, що створив збережену процедуру.