Типы данных SQL: INT, VARCHAR, DATE, DATETIME, BOOLEAN и др.

Зачем нужны типы данных? 🧐

Типы данных в SQL — это как "правила игры" для ваших столбцов. Они определяют: - Какие значения можно хранить (числа, текст, даты) - Сколько места займёт информация - Какие операции возможны (например, сложение INT, но не VARCHAR)

Без типов данных СУБД не поймёт, как обрабатывать ваши записи. Это фундамент, на котором строится вся работа с базами!


Числовые типы: INT, FLOAT, DECIMAL 🔢

INT — целые числа

CREATE TABLE users (
    id INT PRIMARY KEY,
    age INT
);
  • Диапазон: от -2,147,483,648 до 2,147,483,647
  • Где использовать: ID, количество, любые целые значения

FLOAT и DECIMAL — числа с плавающей точкой

CREATE TABLE products (
    price DECIMAL(10, 2), -- 10 цифр всего, 2 после запятой
    rating FLOAT
);
  • Разница: DECIMAL точный (для денег), FLOAT приближённый (для научных расчётов)

Строковые типы: VARCHAR, TEXT 🅰️

VARCHAR(n) — текст переменной длины

CREATE TABLE books (
    title VARCHAR(100), -- максимум 100 символов
    author VARCHAR(50)
);
  • Фишка: Занимает только нужное место + можно указать лимит

TEXT — для больших текстов

CREATE TABLE articles (
    content TEXT -- без ограничения длины
);
  • Производительность: VARCHAR быстрее для коротких строк

Дата и время: DATE, TIME, DATETIME 📅

DATE — только дата

CREATE TABLE events (
    event_date DATE -- формат: 'YYYY-MM-DD'
);

DATETIME — дата + время

CREATE TABLE orders (
    created_at DATETIME -- 'YYYY-MM-DD HH:MM:SS'
);

Простой пример запроса:

SELECT * FROM orders 
WHERE created_at > '2023-01-01 00:00:00';

Логический тип: BOOLEAN (BOOL) ✔️

Хранит TRUE или FALSE. В некоторых СУБД реализован как TINYINT(1):

CREATE TABLE tasks (
    is_completed BOOLEAN DEFAULT FALSE
);

-- Вставка данных
INSERT INTO tasks (is_completed) VALUES (TRUE);

Экзотические, но полезные типы 🦄

ENUM — список допустимых значений

CREATE TABLE shirts (
    color ENUM('red', 'blue', 'green')
);

JSON — хранение структурированных данных

CREATE TABLE users (
    preferences JSON -- храним настройки пользователя
);

Как выбрать правильный тип? 🎯

  1. Минимизируйте место: Для возраста хватит TINYINT (0-255), а не INT
  2. Учитывайте операции: Для расчётов — числа, для поиска — строки
  3. Будущее: Поле username лучше сделать VARCHAR(50), чем VARCHAR(10)

Антипример (как НЕ надо):

CREATE TABLE bad_design (
    phone_number INT, -- телефоны бывают с '+'
    birth_date VARCHAR(10) -- нельзя проверить валидность
);

Практический кейс: интернет-магазин 🛒

Создадим оптимальную таблицу товаров:

CREATE TABLE products (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(100) NOT NULL,
    price DECIMAL(10, 2) CHECK (price > 0),
    category ENUM('electronics', 'clothing', 'food'),
    in_stock BOOLEAN DEFAULT TRUE,
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);

Разбор полётов: - AUTO_INCREMENT — автоматический ID - CHECK — цена не может быть отрицательной - DEFAULT — значения по умолчанию


Важные нюансы ⚠️

1. Приведение типов:

SELECT '10' + 5; -- Результат: 15 (строка преобразована в число)

2. Сравнение дат:

SELECT * FROM orders 
WHERE order_date BETWEEN '2023-01-01' AND '2023-01-31';

3. Сортировка строк:

SELECT * FROM users ORDER BY name COLLATE utf8mb4_unicode_ci;

Итоги: золотые правила 💎

  1. Всегда явно указывайте типы — не полагайтесь на значения по умолчанию
  2. Выбирайте минимально достаточный тип (SMALLINT vs BIGINT)
  3. Для текста с известным максимумом — VARCHAR, иначе TEXT
  4. Даты храните только в специальных типах (DATE/DATETIME)

Теперь вы готовы проектировать таблицы как профи! Когда тип данных выбран правильно — запросы летают, а данные остаются целыми. 🚀

Скрыть рекламу навсегда

🧠 Учёба без воды и зубрёжки

Закрытый Boosty с наработками опытного преподавателя.

Объясняю сложное так, чтобы щелкнуло.

🚀 Забрать доступ к Boosty