MySQL - Версии

Здравствуйте,unker database enthusiasts! Я рад помочь вам окунуться в захватывающий мир версий MySQL. Как ваш доброжелательный сосед-учитель компьютера с многолетним опытом, я убедюсь, что мы легко и с удовольствием изучим эту тему. Так что возьмите свои виртуальные блокноты, и давайте погрузимся в!

MySQL - Versions

Версии MySQL

MySQL, как хорошее вино, с возрастом становится только лучше. С момента своего создания в 1995 году он прошел множество обновлений и улучшений. Давайте быстро пройдемся по некоторым из основных версий:

MySQL 3.23 (2001)

Эта версия стала переломной, introduцируя функции, такие как:

  • Полный текстовый индекс
  • Репликация
  • Кэш запросов

MySQL 4.0 (2003)

Этот релиз принес некоторые захватывающие дополнения:

  • Запросы Union
  • Подзапросы
  • Функции GIS

MySQL 5.0 (2005)

Крупная веха, introduцирующая:

  • Хранимые процедуры
  • Представления
  • Триггеры

MySQL 5.5 (2010)

Эта версия была сосредоточена на улучшениях производительности:

  • InnoDB в качестве стандартного движка хранения
  • Полусинхронная репликация

MySQL 5.6 (2013)

Улучшение производительности и масштабируемости:

  • Онлайн DDL операции
  • Улучшенная производительность репликации

MySQL 5.7 (2015)

Значительное обновление с:

  • Поддержкой JSON
  • Улучшенными функциями безопасности
  • Улучшениями в схеме производительности

MySQL 8.0 (2018)

Последняя основная версия, которую мы рассмотрим более подробно!

Функции, добавленные в MySQL 8.0

MySQL 8.0 похож на супергероя среди версий баз данных, напичканного новыми возможностями и способностями. Давайте рассмотрим некоторые из его coolest функций:

1. Хранилище документов

MySQL теперь поддерживает хранение и запрос JSON документов, делая его гибридной реляционной и документной базой данных. Вот простой пример:

CREATE TABLE products (
id INT PRIMARY KEY,
details JSON
);

INSERT INTO products VALUES (1, '{"name": "Laptop", "price": 999.99, "specs": {"RAM": "16GB", "CPU": "i7"}}');

SELECT JSON_EXTRACT(details, '$.name') AS product_name
FROM products
WHERE JSON_EXTRACT(details, '$.price') < 1000;

Этот код создает таблицу с JSON столбцом, вставляет продукт с вложенными деталями и затем запрашивает его на основе свойства JSON.

2. Функции окна

Функции окна позволяют выполнять вычисления по набору строк, связанных с текущей строкой. Вот пример:

SELECT
product_name,
category,
price,
AVG(price) OVER (PARTITION BY category) AS avg_category_price
FROM products;

Этот запрос calculates среднюю цену для каждой категории alongside индивидуальных цен на продукты.

3. Общие таблицы Выражений (CTEs)

CTEs делают сложные запросы более читаемыми. Вот простой пример:

WITH high_value_customers AS (
SELECT customer_id
FROM orders
GROUP BY customer_id
HAVING SUM(total_amount) > 10000
)
SELECT c.name, c.email
FROM customers c
JOIN high_value_customers hvc ON c.id = hvc.customer_id;

Этот запрос сначала определяет CTE для высокоценных клиентов, а затем использует его в основном запросе.

4. Невидимые индексы

Теперь вы можете сделать индексы невидимыми для тестирования:

ALTER TABLE customers ALTER INDEX idx_email INVISIBLE;

Это позволяет вам тестировать влияние индекса, не удаляя его физически.

5. Улучшенные SQL роли

MySQL 8.0 introduces более robust роль-based контроль доступа:

CREATE ROLE 'app_developer', 'app_read', 'app_write';

GRANT SELECT ON app_db.* TO 'app_read';
GRANT INSERT, UPDATE, DELETE ON app_db.* TO 'app_write';

GRANT 'app_read', 'app_write' TO 'app_developer';

CREATE USER 'jane'@'localhost' IDENTIFIED BY 'password123';
GRANT 'app_developer' TO 'jane'@'localhost';

Этот пример создает роли с различными разрешениями и assigns их пользователю.

Функции, устаревшие в MySQL 8.0

Пока MySQL развивается, некоторые функции становятся устаревшими. Это как чистка гардероба - иногда нужно освобождать место для новых вещей! Вот некоторые функции, устаревшие в MySQL 8.0:

Устаревшая функция Замена/Альтернатива
Опция --skip-symbolic-links --skip-symlink
Функция ENCRYPT() Используйте AES_ENCRYPT()
Функции DES_ENCRYPT() и DES_DECRYPT() Используйте AES_ENCRYPT() и AES_DECRYPT()
Функция FOUND_ROWS() Используйте SELECT с LIMIT предложением
SQL_CALC_FOUND_ROWS Используйте SELECT COUNT(*)

Помните, "устаревшие" не означает, что эти функции исчезли overnight. Это скорее friendly warning, что они могут не быть в будущих версиях, поэтому лучше начать использовать альтернативы.

В заключение, MySQL 8.0 похож на швейцарский армейский нож для управления базами данных - напичкан мощными новыми инструментами и оптимизирован старые. Продолжая ваше путешествие с MySQL, помните, что каждая версия приносит новые возможности и улучшения. Будьте любопытны, продолжайте экспериментировать и, что самое главное, получайте удовольствие от работы с базами данных!

Credits: Image by storyset