.. _mysql-tables: Шаг 3 - Работа с таблицами в MySQL ================================== Типы данных в MySQL ------------------- MySQL поддерживает богатый набор типов данных: **Целочисленные типы:** +-----------+-------------------------------------+---------------------+ | Тип | Диапазон | Размер | +===========+=====================================+=====================+ | TINYINT | -128 до 127 | 1 байт | +-----------+-------------------------------------+---------------------+ | SMALLINT | -32,768 до 32,767 | 2 байта | +-----------+-------------------------------------+---------------------+ | MEDIUMINT | -8,388,608 до 8,388,607 | 3 байта | +-----------+-------------------------------------+---------------------+ | INT | -2^31 до 2^31-1 | 4 байта | +-----------+-------------------------------------+---------------------+ | BIGINT | -2^63 до 2^63-1 | 8 байт | +-----------+-------------------------------------+---------------------+ **Строковые типы:** +---------------+-------------------------------------+---------------------+ | Тип | Описание | Макс. размер | +===============+=====================================+=====================+ | CHAR(n) | Фиксированная длина | 255 символов | +---------------+-------------------------------------+---------------------+ | VARCHAR(n) | Переменная длина | 65,535 символов | +---------------+-------------------------------------+---------------------+ | TEXT | Длинный текст | 65,535 байт | +---------------+-------------------------------------+---------------------+ | ENUM | Перечисление значений | 65,535 элементов | +---------------+-------------------------------------+---------------------+ **Дата и время:** +-----------+-------------------------------------+---------------------+ | Тип | Формат | Диапазон | +===========+=====================================+=====================+ | DATE | YYYY-MM-DD | 1000-01-01 до | | | | 9999-12-31 | +-----------+-------------------------------------+---------------------+ | DATETIME | YYYY-MM-DD HH:MM:SS | 1000-01-01 00:00:00 | | | | до 9999-12-31 23:59:59| +-----------+-------------------------------------+---------------------+ | TIMESTAMP | YYYY-MM-DD HH:MM:SS | 1970-01-01 00:00:01 | | | | UTC до 2038-01-19 | +-----------+-------------------------------------+---------------------+ Создание таблиц --------------- Пример создания таблицы employees (как в тестовой БД): .. code-block:: sql CREATE TABLE employees ( emp_no INT NOT NULL, birth_date DATE NOT NULL, first_name VARCHAR(14) NOT NULL, last_name VARCHAR(16) NOT NULL, gender ENUM('M','F') NOT NULL, hire_date DATE NOT NULL, PRIMARY KEY (emp_no), INDEX idx_name (last_name, first_name) ) ENGINE=InnoDB; Особенности MySQL: - Поддержка разных движков хранения (InnoDB, MyISAM) - Возможность указания кодировки (CHARSET=utf8mb4) - Поддержка ENUM для полей с ограниченным набором значений Просмотр структуры таблицы: .. code-block:: sql SHOW CREATE TABLE employees; -- Или DESCRIBE employees; Удаление таблиц --------------- .. code-block:: sql DROP TABLE IF EXISTS employees; -- Для удаления с внешними ключами SET FOREIGN_KEY_CHECKS = 0; DROP TABLE employees; SET FOREIGN_KEY_CHECKS = 1; Создание тестовой базы данных ----------------------------- Для работы с тестовой БД employees: 1. Клонируйте репозиторий: .. code-block:: bash git clone https://github.com/datacharmer/test_db.git 2. Импортируйте данные: .. code-block:: bash mysql -u root -p < employees.sql 3. Проверьте загрузку: .. code-block:: sql SELECT COUNT(*) FROM employees; -- Должно вернуть ~300,000 записей Пример создания аналогичной структуры: .. code-block:: sql CREATE TABLE departments ( dept_no CHAR(4) NOT NULL, dept_name VARCHAR(40) NOT NULL, PRIMARY KEY (dept_no), UNIQUE KEY (dept_name) ) ENGINE=InnoDB; CREATE TABLE dept_emp ( emp_no INT NOT NULL, dept_no CHAR(4) NOT NULL, from_date DATE NOT NULL, to_date DATE NOT NULL, FOREIGN KEY (emp_no) REFERENCES employees (emp_no) ON DELETE CASCADE, FOREIGN KEY (dept_no) REFERENCES departments (dept_no) ON DELETE CASCADE, PRIMARY KEY (emp_no, dept_no) ) ENGINE=InnoDB; Ключевые отличия от SQLite: --------------------------- 1. Богатая система типов данных 2. Поддержка ENUM и SET 3. Возможность выбора движка хранения 4. Расширенные возможности индексов 5. Полноценная поддержка внешних ключей 6. Возможность задания кодировки на уровне таблицы 7. Поддержка партиционирования