Шаг 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:

  1. Клонируйте репозиторий: .. code-block:: bash

  2. Импортируйте данные: .. code-block:: bash

    mysql -u root -p < employees.sql

  3. Проверьте загрузку: .. 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:

  1. Богатая система типов данных

  2. Поддержка ENUM и SET

  3. Возможность выбора движка хранения

  4. Расширенные возможности индексов

  5. Полноценная поддержка внешних ключей

  6. Возможность задания кодировки на уровне таблицы

  7. Поддержка партиционирования