Тимчасові таблиці

 

 

Змінна SQL дозволяє зберегти одне проміжне значення. Коли необхідно зберегти результуючу таблицю, вдаються до тимчасових таблиць. Створення тимчасових таблиць здійснюється за допомогою оператора CREATE temporary table, синтаксис якого нічим не відрізняється від синтаксису оператора CREATE TABLE.

 

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

 

Приклад (Створення тимчасової таблиці)

CREATE TEMPORARY TABLE temp (id_catalog INT, name TINYINT);

 

У прикладі демонструється створення таблиці temp. Якщо виникає необхідність видалити таблицю до моменту завершення з'єднання з сервером, можна скористатися оператором drop table (приклад).

 

Приклад (Видалення тимчасової таблиці)

DROP table temp;

 

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

 

Приклад (Створення тимчасової таблиці за допомогою вкладеного запиту)

CREATE TEMPORARY TABLE temp

SELECT id_catalog, COUNT(id_catalog) AS total

FROM products GROUP BY id_catalog;

 

select * from temp;

 

id_catalog total

1 9

2 6

3 4

4 5

5 6

 

Слід звернути увагу на той факт, що при такому способі створення таблиці не потрібно визначати структуру таблиці temp - вона автоматично приймає структуру результуючої таблиці оператора select.

Тимчасова таблиця temp може виступати в якості предмета запиту. У прикладі підраховується сума значень стовпця total.

 

Приклад (Запит до тимчасової таблиці)

select sum(total) from temp;

 

SUM(total)

30

 

Помістивши в змінну @total загальне число товарних позицій у таблиці products можна отримати відсоткове співвідношення числа товарних позицій у різних відділах навчального електронного магазину (приклад).

 

Приклад (Відсоткове відношення числа товарних позицій по відділах)

select @total := sum(total) from temp;

 

@total := SUM(total)

30

 

select id_catalog, format((total/@total)*100,2) AS percent

FROM temp;

 

id_catalog percent

1 30.00

2 20.00

3 13.33

4 16.61

5 20.00

 

Системна змінна big tables дозволяє повідомити СУБД MySQL, де повинні зберігатися тимчасові таблиці: в оперативній пам'яті або на диску. Якщо змінна встановлюється в 1, всі тимчасові таблиці зберігаються на диску, якщо в 0, то в оперативній пам'яті. Встановити нове значення змінної можна за допомогою оператора set (приклад).