mysql-examples.md•17 kB
# Примеры MySQL
*[English](../../en/examples/mysql-examples.md) | [中文](../../zh/examples/mysql-examples.md) | [Français](../../fr/examples/mysql-examples.md) | [Español](../../es/examples/mysql-examples.md) | [العربية](../../ar/examples/mysql-examples.md) | Русский*
Этот документ содержит примеры использования MCP Database Utilities с базами данных MySQL.
## Настройка соединения с MySQL
Для подключения к базе данных MySQL вам необходимо добавить соответствующую конфигурацию в ваш файл конфигурации:
```yaml
connections:
my-mysql:
type: mysql
host: localhost
port: 3306
database: mydatabase
user: myuser
password: mypassword
ssl:
enabled: true
verify_cert: true
ca_cert: /path/to/ca.pem # опционально
pool:
max_size: 5
timeout: 30
```
### Параметры соединения
| Параметр | Обязательный | Описание |
|----------|--------------|----------|
| `type` | Да | Тип базы данных, должен быть `mysql` |
| `host` | Да | Хост сервера MySQL |
| `port` | Нет | Порт сервера MySQL (по умолчанию: 3306) |
| `database` | Да | Имя базы данных для подключения |
| `user` | Да | Имя пользователя для аутентификации |
| `password` | Да | Пароль для аутентификации |
| `ssl.enabled` | Нет | Включить SSL/TLS для соединения (по умолчанию: false) |
| `ssl.verify_cert` | Нет | Проверять сертификат сервера (по умолчанию: true) |
| `ssl.ca_cert` | Нет | Путь к CA-сертификату для проверки сертификата сервера |
| `pool.max_size` | Нет | Максимальный размер пула соединений (по умолчанию: 5) |
| `pool.timeout` | Нет | Таймаут соединения в секундах (по умолчанию: 30) |
## Примеры взаимодействия
### Просмотр доступных таблиц
**Вы**: "Можете ли вы показать мне все таблицы в базе данных my-mysql?"
**ИИ**: "Я проверю таблицы в базе данных my-mysql для вас. Вот список таблиц:
```
+------------------+
| Tables |
+------------------+
| customers |
| orders |
| products |
| inventory |
| suppliers |
| order_items |
| product_category |
| employees |
+------------------+
```
### Изучение структуры таблицы
**Вы**: "Какова структура таблицы customers?"
**ИИ**: "Вот структура таблицы customers в базе данных my-mysql:
```
+---------------------+--------------+------+-----+-------------------+----------------+
| Column | Type | Null | Key | Default | Extra |
+---------------------+--------------+------+-----+-------------------+----------------+
| id | int | NO | PRI | NULL | auto_increment |
| first_name | varchar(50) | NO | | NULL | |
| last_name | varchar(50) | NO | | NULL | |
| email | varchar(100) | NO | UNI | NULL | |
| phone | varchar(20) | YES | | NULL | |
| address | varchar(255) | YES | | NULL | |
| city | varchar(50) | YES | | NULL | |
| state | varchar(50) | YES | | NULL | |
| postal_code | varchar(20) | YES | | NULL | |
| country | varchar(50) | YES | | NULL | |
| registration_date | datetime | NO | | CURRENT_TIMESTAMP | |
| last_purchase_date | datetime | YES | | NULL | |
| total_purchases | decimal(10,2)| YES | | 0.00 | |
+---------------------+--------------+------+-----+-------------------+----------------+
```
Таблица customers содержит информацию о клиентах, включая их контактные данные, адрес и историю покупок."
### Выполнение запросов
**Вы**: "Сколько клиентов у нас из каждой страны?"
**ИИ**: "Я выполню запрос для подсчета клиентов по странам. Вот результаты:
```sql
SELECT country, COUNT(*) as customer_count
FROM customers
GROUP BY country
ORDER BY customer_count DESC;
```
```
+---------------+----------------+
| country | customer_count |
+---------------+----------------+
| United States | 342 |
| Canada | 125 |
| United Kingdom| 98 |
| Germany | 87 |
| France | 76 |
| Australia | 65 |
| Japan | 54 |
| China | 43 |
| Brazil | 38 |
| Mexico | 32 |
| Other | 156 |
+---------------+----------------+
```
Большинство ваших клиентов находятся в Соединенных Штатах (342), за ними следуют Канада (125) и Великобритания (98)."
### Анализ данных
**Вы**: "Можете ли вы проанализировать наши 10 лучших продуктов по выручке?"
**ИИ**: "Я проанализирую 10 лучших продуктов по выручке. Вот результаты:
```sql
SELECT
p.id,
p.name,
p.category,
SUM(oi.quantity) as total_units_sold,
SUM(oi.quantity * oi.unit_price) as total_revenue
FROM
products p
JOIN
order_items oi ON p.id = oi.product_id
JOIN
orders o ON oi.order_id = o.id
WHERE
o.order_date >= DATE_SUB(CURRENT_DATE, INTERVAL 1 YEAR)
GROUP BY
p.id, p.name, p.category
ORDER BY
total_revenue DESC
LIMIT 10;
```
```
+----+-------------------------+-------------+-----------------+---------------+
| id | name | category | total_units_sold| total_revenue |
+----+-------------------------+-------------+-----------------+---------------+
| 12 | Premium Laptop Pro | Electronics | 1,245 | 1,494,000.00 |
| 8 | Smartphone X | Electronics | 2,876 | 1,438,000.00 |
| 45 | Wireless Headphones | Electronics | 4,532 | 679,800.00 |
| 23 | Ultra HD Smart TV | Electronics | 987 | 592,200.00 |
| 67 | Designer Watch | Accessories | 1,432 | 429,600.00 |
| 34 | Premium Coffee Maker | Home | 2,154 | 387,720.00 |
| 56 | Fitness Tracker | Electronics | 3,210 | 321,000.00 |
| 78 | Leather Handbag | Accessories | 876 | 306,600.00 |
| 91 | Wireless Speaker System | Electronics | 1,543 | 277,740.00 |
| 42 | Professional Blender | Home | 1,876 | 262,640.00 |
+----+-------------------------+-------------+-----------------+---------------+
```
**Анализ:**
1. **Доминирование электроники**: 6 из 10 лучших продуктов относятся к категории электроники, что составляет около 70% от общей выручки в этом списке.
2. **Высокая стоимость vs. объем**: Premium Laptop Pro генерирует наибольшую выручку, несмотря на то, что продается в меньшем количестве, чем Smartphone X или Wireless Headphones, что указывает на его высокую маржу.
3. **Разнообразие категорий**: Хотя электроника доминирует, аксессуары и товары для дома также представлены в топ-10, что показывает разнообразие вашего ассортимента.
4. **Средняя цена продажи**:
- Premium Laptop Pro: ~$1,200
- Smartphone X: ~$500
- Wireless Headphones: ~$150
- Designer Watch: ~$300
5. **Рекомендации**:
- Увеличьте маркетинговые усилия для категории электроники
- Рассмотрите возможность расширения линейки Premium Laptop из-за высокой маржи
- Исследуйте возможности кросс-продаж между Smartphone X и Wireless Headphones"
### Сложные запросы
**Вы**: "Можете ли вы показать мне тенденцию ежемесячных продаж за последний год с разбивкой по категориям продуктов?"
**ИИ**: "Я проанализирую ежемесячные продажи за последний год с разбивкой по категориям продуктов:
```sql
SELECT
DATE_FORMAT(o.order_date, '%Y-%m') as month,
p.category,
SUM(oi.quantity * oi.unit_price) as monthly_revenue
FROM
orders o
JOIN
order_items oi ON o.id = oi.order_id
JOIN
products p ON oi.product_id = p.id
WHERE
o.order_date >= DATE_SUB(CURRENT_DATE, INTERVAL 1 YEAR)
GROUP BY
DATE_FORMAT(o.order_date, '%Y-%m'), p.category
ORDER BY
month, p.category;
```
Вот результаты анализа ежемесячных продаж за последний год с разбивкой по категориям:
| Месяц | Электроника | Аксессуары | Дом | Одежда | Спорт | Другое |
|----------|-------------|------------|----------|----------|----------|----------|
| 2022-11 | 245,678.00 | 98,432.00 | 76,543.00| 65,432.00| 43,210.00| 32,456.00|
| 2022-12 | 387,654.00 | 156,789.00 | 98,765.00| 87,654.00| 65,432.00| 45,678.00|
| 2023-01 | 198,765.00 | 87,654.00 | 65,432.00| 54,321.00| 32,109.00| 21,098.00|
| 2023-02 | 187,654.00 | 76,543.00 | 54,321.00| 43,210.00| 32,109.00| 21,098.00|
| 2023-03 | 210,987.00 | 87,654.00 | 65,432.00| 54,321.00| 43,210.00| 32,109.00|
| 2023-04 | 232,109.00 | 98,765.00 | 76,543.00| 65,432.00| 43,210.00| 32,109.00|
| 2023-05 | 254,321.00 | 109,876.00 | 87,654.00| 76,543.00| 54,321.00| 43,210.00|
| 2023-06 | 265,432.00 | 121,098.00 | 98,765.00| 87,654.00| 65,432.00| 43,210.00|
| 2023-07 | 276,543.00 | 132,109.00 | 109,876.00| 98,765.00| 76,543.00| 54,321.00|
| 2023-08 | 287,654.00 | 143,210.00 | 121,098.00| 109,876.00| 87,654.00| 65,432.00|
| 2023-09 | 298,765.00 | 154,321.00 | 132,109.00| 121,098.00| 98,765.00| 76,543.00|
| 2023-10 | 321,098.00 | 165,432.00 | 143,210.00| 132,109.00| 109,876.00| 87,654.00|
**Ключевые наблюдения:**
1. **Сезонные тенденции**:
- Пик продаж в декабре (праздничный сезон) во всех категориях
- Снижение в январе-феврале (постпраздничный спад)
- Постепенный рост с марта по октябрь
2. **Доминирование категорий**:
- Электроника стабильно является лидером по выручке
- Аксессуары занимают второе место
- Категория "Дом" показывает наибольший рост в процентном отношении (+87% с ноября по октябрь)
3. **Темпы роста**:
- Общий рост выручки: +31% (с ноября по октябрь)
- Самый быстрорастущий месяц: июль-август (+4.5% в среднем по всем категориям)
- Самая быстрорастущая категория: Спорт (+154% с ноября по октябрь)
4. **Рекомендации**:
- Подготовьтесь к праздничному сезону с увеличенными запасами электроники
- Рассмотрите возможность специальных промоакций в феврале для борьбы с постпраздничным спадом
- Инвестируйте в категорию "Спорт", учитывая ее высокие темпы роста
- Разработайте стратегии кросс-продаж между электроникой и аксессуарами"
## Советы по оптимизации
### Индексы
MySQL использует индексы для быстрого поиска строк. Вот некоторые советы по индексам:
1. **Проверка существующих индексов**:
```sql
SHOW INDEX FROM table_name;
```
2. **Анализ выполнения запроса**:
```sql
EXPLAIN SELECT * FROM customers WHERE email = 'example@email.com';
```
3. **Рекомендации по индексам**:
- Создавайте индексы для столбцов, часто используемых в условиях WHERE
- Создавайте индексы для столбцов, используемых в JOIN
- Создавайте индексы для столбцов, используемых в ORDER BY и GROUP BY
- Избегайте избыточных индексов, так как они замедляют операции INSERT, UPDATE и DELETE
### Оптимизация запросов
1. **Выбирайте только необходимые столбцы**:
```sql
-- Хорошо
SELECT id, name, email FROM customers WHERE city = 'New York';
-- Не оптимально
SELECT * FROM customers WHERE city = 'New York';
```
2. **Используйте LIMIT для ограничения результатов**:
```sql
SELECT * FROM orders ORDER BY order_date DESC LIMIT 100;
```
3. **Избегайте использования функций в условиях WHERE**:
```sql
-- Не оптимально (не может использовать индекс)
SELECT * FROM customers WHERE YEAR(registration_date) = 2023;
-- Лучше (может использовать индекс)
SELECT * FROM customers WHERE registration_date >= '2023-01-01' AND registration_date < '2024-01-01';
```
4. **Используйте JOIN вместо подзапросов, где это возможно**:
```sql
-- Не оптимально
SELECT * FROM orders WHERE customer_id IN (SELECT id FROM customers WHERE country = 'USA');
-- Лучше
SELECT o.* FROM orders o JOIN customers c ON o.customer_id = c.id WHERE c.country = 'USA';
```
## Ограничения и особенности MySQL
1. **Чувствительность к регистру имен таблиц**:
- В Windows имена таблиц не чувствительны к регистру
- В Linux/Unix имена таблиц чувствительны к регистру по умолчанию
2. **Типы хранилищ**:
- InnoDB: поддерживает транзакции, внешние ключи, блокировку на уровне строк
- MyISAM: быстрее для операций только для чтения, не поддерживает транзакции
3. **Ограничения**:
- Максимальный размер таблицы: зависит от файловой системы
- Максимальное количество столбцов в таблице: 4096
- Максимальный размер строки: 65,535 байт
## Заключение
MySQL — это мощная и гибкая система управления базами данных, которая хорошо работает с MCP Database Utilities. Следуя приведенным выше советам и примерам, вы можете эффективно использовать MySQL для хранения и анализа ваших данных через интерфейс ИИ.