Шаг 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 (как в тестовой БД):
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 для полей с ограниченным набором значений
Просмотр структуры таблицы:
SHOW CREATE TABLE employees;
-- Или
DESCRIBE employees;
Удаление таблиц
DROP TABLE IF EXISTS employees;
-- Для удаления с внешними ключами
SET FOREIGN_KEY_CHECKS = 0;
DROP TABLE employees;
SET FOREIGN_KEY_CHECKS = 1;
Создание тестовой базы данных
Для работы с тестовой БД employees:
Клонируйте репозиторий: .. code-block:: bash
Импортируйте данные: .. code-block:: bash
mysql -u root -p < employees.sql
Проверьте загрузку: .. code-block:: sql
SELECT COUNT(*) FROM employees;
—Должно вернуть ~300,000 записей
Пример создания аналогичной структуры:
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:
Богатая система типов данных
Поддержка ENUM и SET
Возможность выбора движка хранения
Расширенные возможности индексов
Полноценная поддержка внешних ключей
Возможность задания кодировки на уровне таблицы
Поддержка партиционирования