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