Збережені процедури в mysql - все про it і програмуванні

Що для цього потрібно? Встановіть MySQL сервер версії 5 або вище (dev.mysql.com/downloads). Процедури можна створювати як запити, наприклад через командний рядок MySQL, але для зручності раджу скачати MySQL GUI Tools (dev.mysql.com/downloads/gui-tools). Даний пакет включає в себе три програми - MySQL Administrator, MySQL Query Browser і MySQL Migration Toolkit. Нам знадобляться перші дві. (Хоча можна обійтися одним MySQL Query Browser, але всі ці $$ в збережених процедурах іноді можуть збити з пантелику).






Перша збережена процедура

Отже, відкриваємо MySQL Administrator, підключаємося до сервера MySQL і створюємо нову схему (базу даних): клацніть Catalogs, виберіть Create New Schema в області Schemata (Ctrl + N). Назвіть її як-небудь (наприклад db). Відкрийте щойно створену схему, виберіть вкладку Stored procedures і клацніть кнопку Create Stored Proc. Назвіть свою процедуру procedure1. У тіло процедури (між BEGIN і END) впишіть наступне:
І натисніть Execute SQL - процедура створена. Відкрийте MySQL Query Browser, виберіть свою схему (db) і впишіть наступний запит:
Вуаля! Вітаю.

Змінні в MySQL

Для того, щоб витягти каку-то користь від збережених процедур в MySQL, вам доведеться попрацювати зі змінними. Так як це не входь в рамки даної статті, покажу лише кілька прикладів.

прості змінні

Системні змінні

Різниця між простими і системними змінними в тому, що системні змінні доступні з поза збереженої процедури. Тобто, щоб витягти якісь дані потрібно користуватися системними, а змінні які потрібні тільки всередині процедури повинні бути простими.

Параметри в збережених процедурах

Тут теж все досить просто. Змінюємо перший рядок, що оголошує саму процедуру:
Тут, ключове слово IN вказує на те, що параметр вказаний тільки для читання. Далі з цим параметром працюємо як зі звичайною змінною всередині процедури:

Умови, Цикли. IF THEN ELSE, WHILE







Умови та цикли вам обов'язково знадобляться при написанні комплексних процедур, але зациклюватися на цій темі не буду. Думаю хоч якісь навички програмування у вас є, так що покажу лише синтаксис.

простий приклад

Один з хороших випадків застосування процедур - тоді, коли вам потрібно об'єднати декілька запитів в один, наприклад додавання теми в форум і збільшення загальної кількості тем. Припустимо таблиця threads
Тут title у нас буде заголовком нової теми. Ну і таблиця, наприклад з різними статистичними змінними сайту, в тому числі загальна кількість тем у формі.
Тут ніби все зрозуміло, припустимо у нас там є запис з name = threads і value = 0. Створимо нову збережену процедуру procedure2.
Пояснювати особливо нічого, просто два запити об'єднали в один. Тепер ми можемо викликати цю процедуру таким чином:
Таким чином, замість того, щоб передати два або більше запитів (наприклад через php), ми можемо передати один - оптимізація, чистий код і можна змінити в будь-який момент не зачіпаючи інші скрипти.

Курсори (MySQL Cursors)

Курсори дозволяють пройтися по всіх отриманих результатів запиту. На теорії пояснити складно, покажу на практиці. Додамо ще одну таблицю до нашої бази даних - hits:
Сюди ми будемо записувати всі теги з усіх тем. Процедура буде виглядати приблизно так:
Детально. Процедура пройде через кожну тему, кожен тег проб'є по таблиці tags, і якщо даний тег відсутній, то вона його додасть.

Відкриваємо курсор, і отримуємо перший запис. Далі в циклі - Вибираємо кількість збігів з таблиці тегів для поточного тега і поміщаємо результат в змінну iCount. Якщо результатів немає, то запитом INSERT вставляємо новий тег.

Зрештою закриваємо курсор і виходимо з процедури. Ну от і все.

витяг даних

Згадаймо системні змінні і розглянемо ще одну маніпуляцію над нашими таблицями - отримати загальну кількість тегів і тем. Перейдемо відразу до процедури:
Оголошуємо дві змінних - iTags - кількість тегів, і iThreads - загальна кількість тем.

Далі два простих запиту на вибірку, заповнюючи наші змінні. Ну і в кінці присвоюємо системним змінним значення поточних простих змінних. При виклику дана процедура нічого не повертає, але після її виклику ми можемо вважати необхідні значення з системних змінних:

Уявлення іноді називають "віртуальними таблицями". Така назва пов'язана з тим, що уявлення є для користувача як таблиця, але саме воно не містить даних, а витягує їх з таблиць в момент звернення до нього. Якщо дані змінені в базовій таблиці, то користувач отримає.

Простий інтерфейс з perl СУБД MySQL Цей інтерфейс являє собою перший спосіб звернутися до бази даних MySQL з програми на perl. Коротко про головне: use Mysql; $ Dbh = Mysql-> Connect; $ Dbh = Mysql-> Connect ($ host); $ Dbh = Mysql-> Connect ($ host, $ database); n.







Схожі статті