# Примеры 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 для хранения и анализа ваших данных через интерфейс ИИ.
