ENote
  • ✨Home
    • Відмова від відповідальності
  • Progr
    • Python
      • Модулі
        • pip
        • cgitb
        • datetime
          • Класс datetime() модуля datetime
            • Методы объекта datetime.datetime()
            • datetime.datetime examples
          • Класс timedelta() модуля datetime
            • datetime.timedelta examples
          • Класс date() модуля datetime
            • datetime.date examples
          • Класс time() модуля datetime
            • Формат для функций .strftime() и .strptime(). модуля datetime
        • os.path
        • pathlib
          • pathlib to str
        • subproces
        • os
        • Jinja
          • Синтаксис шаблонів Jinja
          • Клас Environment()
          • Простой пример cgi-скрипта c Jinja-шаблоном
          • Создание переменных
            • Як оновити глобальну змінну зсередини оператора IF / ELSE або циклу FOR
          • Фільтри і методи
          • Число у рядок, slices
          • Вбудовані фільтри Jinja2
        • re
          • re.search - example
          • re.findall - example
        • email / smtplib
          • Как отправлять электронные письма с помощью Python
        • requests
          • Як зберегти та завантажити файли cookie в запитах Python?
          • Извлечение и установка cookies с модулем requests в Python
          • Links
        • http.cookies
          • Всё о работе с cookie в Python — класс http.cookies
        • xlrd
        • xlwt
        • borb
          • ChunkOfText
          • send_usage_statistics
          • borb clear
          • 2.1.3 vs 2.1.15
          • QR-code
          • Залежності borb
        • JSON
          • Кирилиця в JSON
        • matplotlib
        • argparse
        • click
        • configparser
        • traceback
        • sys
          • exit()
        • mysql-connector-python
        • logging
        • icrawler
        • Auto Plates
        • rembg
        • random
      • Strings
        • Built-in methods
        • Форматування виводу
        • Початкові нулі
        • Рядок в число
      • list
        • Об’єднання списків
        • list.sort(), sorted()
        • list.reverse(), reversed()
        • all(), any()
        • sum(), min(), max()
        • map(), filter(), reduce()
        • join(), split()
      • tuple
      • dict
        • Об'єднання / злиття словників
        • Сортування словника Python: значення, ключі тощо
      • set
      • class Enum
      • Середнє арифметичне
      • Virtual environment
        • web-app
      • type(), isinstance()
      • __main__
      • Files & Dirs
        • Try except for exception handling
        • Cписок файлов директории
        • User Home Dir
        • Copy file
      • *args, **qwargs
      • Links
      • Область видимости
      • Handling a File Error
      • assert
      • if
      • Числа
        • Округлення чисел
        • Отримати число з рядка
      • Обработка исключений в Python
      • Файлы и сериализация данных
      • OOP
      • Net and Web
      • Структура проекта на Python
      • Распаковка итерируемых объектов
      • Links
      • Algorithms
      • Python exit commands: quit(), exit(), sys.exit() and os._exit()
      • Цикли for / while
      • uuid
    • JavaScript
      • String
        • replaceAll() polyfill
        • Шаблонные строки
      • Array
        • Все способы перебора массива в JavaScript
      • Object
      • document.location
      • RegExp
      • Examples
        • Вычисление остатка от деления
        • Остаток от деления и деление без остатка
        • Округление числа
      • XMLHttpRequest
      • alert, prompt, confirm
      • onclick
      • hidden, display:none
      • LocalStorage, sessionStorage
      • null, undefined
      • cookies (js)
      • var, let и const
        • var vs let
        • const
      • Модифікація DOM
        • DOM select
      • JSON
        • Try
      • fetch
      • typeof
      • FormData не включає disabled набори полів
      • FormData, fdata
      • Більше одного відео YouTube на одній сторінці
    • HTML, CSS
      • favicon
      • Деякі спецсимволи
      • meta
      • ASCII table
      • lang
      • Псевдоелементи ::after і ::before
      • Cursor
      • Об использовании нестандартных пробелов
      • Картинка фоном
      • Безпечні веб-шрифти
      • Завжди внизу, незалежно від пропорцій екрану
      • напівпрозорий елемент
      • Символи з тінью
      • SVG (bootstrap)
      • rel = canonical
      • link stylesheet: integrity & crossorigin
      • rel = noopener
    • Bootstrap
      • Form Validate
      • Password show/hide
    • Errors
  • Dev
    • Git
      • clone
      • git-scm (book)
      • git config
        • files .git*
        • core.filemode
        • core.sharedRepository
      • .gitignore
      • .gitkeep
      • Видалити з репозиторію
        • Видалений файл з однієї гілки...
      • Пам’ятка
        • Перегляд історії комітів
        • Скасувати git add
        • revert
        • Скасувати внесені зміни у файл
        • Додати до коміту файл
        • Видалити історію попередніх коммітів, та почати "з нуля"
        • Додати файли в останній коміт
      • Робота з гілками
        • Порівняти гілки
      • Git за полчаса
      • Три розділи проєкту Git
      • Merge conflict
      • Pull error
        • Git Error: You have divergent branches...
      • diff
      • Video
      • Merge скасувати
      • .gitignore: Permission denied
    • GitHub
      • SSH-підключення до GitHub
      • Перенести на сервер локальный репозиторий
      • Перенести на сервер репозиторій разом з історією
      • Створення змісту
    • Security
      • robots.txt
      • Cookies
    • Аутентифікація і cookies
      • ChatGPT
  • data
    • MySQL
      • MyISAM vs InnoDB
      • Типи даних
        • NULL (todo)
        • TIMESTAMP
        • YEAR
        • JSON
        • Требования к памяти для символьных типов
        • Поиск записей в таблице, которым нет соответствия в другой
      • Приклад створення БД, та користувача
        • Права для пользователей
      • Переглянути всі індекси таблиці
      • Копіювання, клонування таблиць
      • TEMPORARY TABLE
      • JOIN
      • ALTER TABLE
      • AUTO_INCREMENT
        • AUTO_INCREMENT у складовому індексі
      • LIMIT
        • Использование MySQL LIMIT
      • 10 Примеров входной загрузки данных из текстового файла в таблицы MySQL
      • Рішення
        • Выявление и удаление несвязанных записей
        • Выборка произвольных записей
        • Коректне сортування українських літер
        • Найти записи, которые присутствуют в одной таблице и отсутствуют во второй
        • Как удобно посмотреть данные...
        • Нахождение "дыр" в нумерации
        • Знайти дубликати полів в одній таблиці
        • Дані колонки 1 табл. перенести в 2 табл.
      • Функції
        • LAST_INSERT_ID()
        • GROUP_CONCAT
        • COUNT + DISTINCT
        • Функции для работы с датами и временем
      • Автоматизируйте создание бэкапов
      • mysqldump
        • Time Zone UTC
      • Результат запиту у файл
      • Результат запиту у змінну
      • Пособие по MySQL на Python
      • Змінні
      • Эмуляция функции row_number() в MySQL
      • Изучаем хранимые процедуры MySQL
      • SELECT DISTINCT
      • Dump всієї бази даних
      • Індекси
      • FOREIGN KEY
      • MAX(), MIN()
      • LENGTH, CHAR_LENGTH
      • Встановлення
    • MariaDB
    • PostgreSQL
      • Работа с базой данных PostgreSQL
      • Работаем с PostgreSQL через командную строку в Linux
    • Domains
      • Життєвий цикл доменів
      • Статус домена
    • SQLite, MySQL и PostgreSQL: сравниваем популярные реляционные СУБД
  • Linux
    • DNS
      • Как в DNS прописать 301 редирект
      • mail
        • SPF
          • Mirohost
        • _dmarc _domainkey
        • DKIM
        • Прописати ключі DKIM в exim
        • Листи з неіснуючим адресатом
    • Server
      • Zomro
        • pip
        • SSH-доступ по ключу (zomro)
        • venv
        • UnicodeEncodeError: 'latin-1' codec can't encode character
        • Mail Ports
        • Редірект з SSL-сертификатом на транзитному сайті
        • Редірект з SSL за допомогою .htaccess
      • Створення нового користувача з привілеями sudo в Ubuntu
      • SSH-доступ по ключу
      • Часовий пояс в Ubuntu 20.04
      • SSH-підключення командний рядок
      • Як встановити Python 3.9 (нижчу) на Ubuntu 22.04
      • Автозагрузка сервисов в Ubuntu
      • Підвищення безпеки SSH
      • Ubuntu Server
        • Art 01
    • Commands
      • adduser
      • apt
      • cat
      • ls
      • tar
      • ln
      • find
      • chmod
      • chown
      • mv
      • dig
      • ping
      • passwd
      • htpasswd
      • umask
      • usermode
      • history
      • cmp
      • chattr +i
    • Config
      • Keyboard
      • windows
      • My kbdswtch
      • Затримка при завантаженні системи
      • Files
        • /etc/resolv.conf
        • /boot/grub/grub.cfg
        • .config/user-dir.dirs
        • /etc/fstab
      • Як встановити шрифти
    • Apache
      • Встановлення
      • Подключить виртуальный хост
      • Файл .htaccess
        • Установка индексного файла
        • Фільтр IP-адрес
        • ModRewrite
          • Заборонити доступ за User-Agent
          • Перенаправити на іншу сторінку
          • Додавати слеш до адреси
        • Включити SSI
        • Виконувати скрипти CGI
        • Тимчасовий перехід з одного домену на інший
      • SSI
      • SSL
      • Відключити старт Apache з системою
      • Помилки
        • Скрипт не працює
        • CGI-скрипт не виводить кирилицю
        • Could not reliably determine
        • Permissions are missing on a component of the path
        • Symbolic link not allowed or link target not accessible
      • AddType, AddLanguage, AddCharset
    • Nginx
      • 301 редирект з www. та http: на https://(без www.)domain
    • Soft
      • SublimeText
        • Plugins
      • Firefox
      • Gwenview
      • inkscape
      • Double Commander
      • nano
      • mc
        • Знайти потрібний файл
      • meld / diffuse
      • hexedit
      • Kazam - відео з екрану
      • VeraCrypt
      • XnView MP
      • LibreOffice
      • xdotool
      • System Load Monitor
      • Battery Monitor
      • qBittorrent
    • Перетворення .RPM в .DEB
    • Bash
      • Конкатенация строк в Bash
      • Page
    • Файлові часові позначки в Linux: atime, mtime, ctime
    • Права доступу для файлів і каталогів
    • Зміна паролю root
    • Быстро удалить огромное количество файлов в каталоге
    • Як узнати версію Linux?
    • USB Flash ext4
    • Clear Cache
    • Доступ до спільної папки на Windows
    • Віртуальні консолі TTY1–TTY6
    • APT. Заборона оновлення
  • Різне
    • GitBook
    • Банковское округление
    • Ім’я користувача Youtube
  • Hard
    • Hardware
      • Acer Extensa
      • Таймер Feron TM22
      • WD My Book World Edition 2Tb
        • FTP
        • SSH
          • Проблеми
        • SSHFS
      • Canon PIXMA E3340
      • Термометри
    • Auto
      • Акумулятор
    • Electro
    • USB Flash recovery
Powered by GitBook
On this page
  • Чи можна користувацькій змінній привласнити значення запиту?
  • Користувацькі змінні можуть мати значення списку?
  1. data
  2. MySQL

Змінні

Змінні в MySQL використовуються для зберігання значень, які можуть бути використані в SQL-запитах. Вони бувають різних типів і виконують різні функції. Основні види змінних у MySQL включають користувацькі змінні, змінні сесії, змінні системи та змінні стану.

Користувацькі змінні

Користувацькі змінні оголошуються та використовуються в межах сесії. Вони починаються з символу @ і можуть бути використані для зберігання тимчасових значень.

Приклад використання користувацьких змінних:

SET @my_variable = 10;
SELECT @my_variable + 5;  -- Результат буде 15

Змінні сесії

Змінні сесії встановлюються та використовуються тільки в межах поточної сесії. Вони можуть бути змінені за допомогою команди SET.

Приклад використання змінних сесії:

SET SESSION max_connections = 200;

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

Системні змінні контролюють роботу сервера MySQL. Вони можуть мати як глобальну, так і сесійну область видимості.

Приклад використання системних змінних:

SHOW VARIABLES LIKE 'max_connections';
SET GLOBAL max_connections = 500;

Змінні стану

Змінні стану використовуються для моніторингу роботи сервера MySQL. Вони надають інформацію про різні аспекти роботи сервера, такі як кількість запитів, статус підключень тощо.

Приклад використання змінних стану:

SHOW STATUS LIKE 'Threads_connected';

Декларація та присвоєння значень

Декларація користувацьких змінних:

SET @variable_name = value;

Використання змінних у запитах:

SET @a = 10;
SET @b = 20;
SELECT @a + @b;  -- Результат буде 30

Використання змінних в процедурах:

DELIMITER //
CREATE PROCEDURE simpleProcedure()
BEGIN
  DECLARE x INT;
  SET x = 10;
  SELECT x;
END //
DELIMITER ;
CALL simpleProcedure();

Висновок

Змінні в MySQL є потужним інструментом для зберігання і маніпулювання даними всередині SQL-запитів та процедур. Вони допомагають зробити код більш гнучким та зручним для підтримки. Змінні бувають різних типів і кожен з них має свої специфічні особливості і області використання.

Чи можна користувацькій змінній привласнити значення запиту?

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

Використання SELECT INTO

Команда SELECT INTO дозволяє вибирати значення з таблиці та зберігати їх у змінній.

Приклад:

SET @my_variable = 0;
SELECT column_name INTO @my_variable
FROM table_name
WHERE condition;

Пряме присвоєння значення в SELECT

Іншим способом є використання SELECT для прямого присвоєння значення змінній:

Приклад:

SELECT @my_variable := column_name
FROM table_name
WHERE condition;

Приклади використання

Присвоєння значення однієї змінної:

SET @total := 0;
SELECT @total := COUNT(*)
FROM employees
WHERE department_id = 1;

SELECT @total;  -- Повертає кількість працівників у відділі з ID 1

Використання в складених запитах:

SET @average_salary := 0;
SELECT @average_salary := AVG(salary)
FROM employees
WHERE department_id = 1;

SELECT name, salary
FROM employees
WHERE department_id = 1
AND salary > @average_salary;

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

Використання в процедурах

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

Приклад збереженої процедури:

DELIMITER //
CREATE PROCEDURE calculateTotalSales(IN department INT, OUT totalSales DECIMAL(10,2))
BEGIN
  SELECT SUM(sales) INTO totalSales
  FROM sales_table
  WHERE department_id = department;
END //
DELIMITER ;

CALL calculateTotalSales(1, @sales);
SELECT @sales;  -- Повертає загальну суму продажів для відділу з ID 1

У цьому прикладі збережена процедура calculateTotalSales обчислює загальну суму продажів для певного відділу і зберігає результат у змінній @sales.

Користувацькі змінні можуть мати значення списку?

У MySQL користувацькі змінні не можуть безпосередньо зберігати значення списку, оскільки вони призначені для зберігання лише одного значення. Проте, ви можете використовувати декілька підходів для роботи зі списками значень.

1. Використання розділених рядків

Ви можете зберігати список значень у вигляді рядка, розділеного комами або іншими роздільниками, а потім розбирати цей рядок у потрібному форматі при необхідності.

Приклад:

SET @list = '1,2,3,4,5';

-- Розбиття рядка на окремі значення можна виконати за допомогою спеціальної функції або збереженої процедури
SET @aids = (SELECT GROUP_CONCAT(DISTINCT aid) FROM au LIMIT 10);

2. Використання тимчасових таблиць

Ви можете зберігати список значень у тимчасовій таблиці і працювати з цією таблицею у своїх запитах.

Приклад:

CREATE TEMPORARY TABLE temp_table (value INT);

INSERT INTO temp_table (value) VALUES (1), (2), (3), (4), (5);

-- Використання тимчасової таблиці у запитах
SELECT * FROM temp_table;

3. Збереження результатів множинного запиту у користувацьку змінну

Ви можете зберігати результат множинного запиту у користувацьку змінну у вигляді рядка, використовуючи групові функції.

Приклад:

SET @list = (SELECT GROUP_CONCAT(id) FROM table_name WHERE condition);

SELECT @list;  -- Результат буде рядок, де всі id розділені комами

4. Робота з JSON

У новіших версіях MySQL (5.7 і новіше) ви можете зберігати значення списку у форматі JSON і використовувати вбудовані функції для роботи з JSON-даними.

Приклад:

SET @json_list = JSON_ARRAY(1, 2, 3, 4, 5);

-- Використання функцій JSON
SELECT JSON_EXTRACT(@json_list, '$[0]');  -- Повертає перший елемент у списку (1)

Висновок

Хоча користувацькі змінні в MySQL не можуть безпосередньо зберігати списки значень у вигляді масивів або інших складних структур, можна використовувати рядки, тимчасові таблиці або формат JSON для досягнення подібного результату. Ці методи дозволяють зберігати і працювати зі списками значень у запитах і процедурах.

PreviousПособие по MySQL на PythonNextЭмуляция функции row_number() в MySQL

Last updated 1 year ago

GROUP_CONCAT - записує значення стовчика aid , але LIMIT тут не діє - вибираються усі значення таблиці

як строку з комами