SQL код скопирован в буфер обмена
EN PT FR

Урок 9.1: Оператор CREATE TABLE

До этого мы в основном работали с уже существующими таблицами и извлекали из них данные. Но в реальной работе с базой данных важно не только читать информацию, но и уметь создавать структуру хранения данных. Для этого используется оператор CREATE TABLE.

CREATE TABLE относится к языку определения данных (DDL, Data Definition Language). С его помощью мы описываем, как будет устроена таблица: какие в ней будут столбцы, какие типы данных они принимают и какие правила будут применяться к значениям.

Базовый синтаксис

Простейшая форма оператора выглядит так:

CREATE TABLE table_name (
    column1 data_type,
    column2 data_type,
    column3 data_type
);

После имени таблицы в круглых скобках перечисляются столбцы. Для каждого столбца нужно указать:

  • имя столбца (обязательно);
  • тип данных (обязательно);
  • при необходимости дополнительные характеристики (кодировка, ограничения, комментарий и другие).

Пример простой таблицы

Давайте создадим таблицу students:

CREATE TABLE students (
    student_id INT,
    first_name VARCHAR(50),
    last_name VARCHAR(50),
    birth_date DATE,
    created_at TIMESTAMP
);

В этом примере:

  • student_id — идентификатор записи - целое число;
  • first_name и last_name — текстовые значения длиной до 50 символов;
  • birth_date — дата рождения;
  • created_at — дата и время создания записи.

После выполнения этой команды таблица будет создана, но пока останется пустой.


Часто используемые типы данных

При создании таблиц важно выбирать подходящие типы данных. Вот несколько самых распространенных:

  • INT — целые числа;
  • VARCHAR(n) — строка переменной длины до n символов;
  • TEXT — длинный текст произвольного размера;
  • DATE — дата;
  • TIMESTAMP — дата и время, часто используется для хранения момента создания или изменения записи;
  • DECIMAL(p, s) — точные числовые значения, например для денежных сумм;
  • BOOLEAN — логическое значение TRUE или FALSE.

Правильный выбор типа данных помогает экономить место, поддерживать качество данных и избегать ошибок. Подробней о типах данных изложено здесь.


Ограничения столбцов

Ограничения (constraints) задают правила для данных в таблице.

1. PRIMARY KEY

Первичный ключ уникально идентифицирует каждую строку таблицы.

CREATE TABLE students (
    student_id INT PRIMARY KEY,
    first_name VARCHAR(50),
    last_name VARCHAR(50)
);

Столбец student_id не может содержать дубликаты и NULL.

2. NOT NULL

Это ограничение требует, чтобы столбец всегда содержал значение.

CREATE TABLE students (
    student_id INT PRIMARY KEY,
    first_name VARCHAR(50) NOT NULL,
    last_name VARCHAR(50) NOT NULL
);

Теперь first_name и last_name нельзя оставить пустыми.

3. CHECK

Ограничение CHECK задает условие, которому должны соответствовать значения в столбце.

CREATE TABLE products (
    product_id INT PRIMARY KEY,
    product_name VARCHAR(100) NOT NULL,
    price DECIMAL(10, 2) CHECK (price >= 0)
);

В этом примере база данных не позволит сохранить товар с отрицательной ценой.


Дополнительные параметры столбцов

Помимо ограничений, у столбцов есть и дополнительные параметры. Они не запрещают или не разрешают значения напрямую, но помогают задать поведение столбца более точно.

1. DEFAULT

Параметр DEFAULT задает значение по умолчанию, если при вставке оно не указано.

CREATE TABLE products (
    product_id INT PRIMARY KEY,
    product_name VARCHAR(100) NOT NULL,
    price DECIMAL(10, 2) DEFAULT 0.00
);

Если при добавлении товара цена не будет указана, база данных автоматически подставит 0.00.

2. CHARACTER SET и COLLATE

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

CREATE TABLE customers (
    customer_id INT PRIMARY KEY,
    first_name VARCHAR(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci,
    last_name VARCHAR(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci
);

Здесь CHARACTER SET определяет, в какой кодировке будут храниться текстовые данные, а COLLATE — как строки будут сравниваться и сортироваться. Это особенно важно, если таблица должна корректно работать с разными языками и символами.


Пример таблицы с несколькими правилами

Ниже пример более реалистичной таблицы employees:

CREATE TABLE employees (
    employee_id INT PRIMARY KEY,
    first_name VARCHAR(50) NOT NULL,
    last_name VARCHAR(50) NOT NULL,
    email VARCHAR(100) UNIQUE,
    hire_date DATE NOT NULL,
    salary DECIMAL(10, 2) DEFAULT 0.00
);

Что здесь происходит:

  • employee_id — уникальный идентификатор сотрудника;
  • first_name и last_name обязательны;
  • email должен быть уникальным;
  • hire_date обязателен;
  • salary по умолчанию равен 0.00.

Такая структура уже лучше отражает реальные требования к данным.


Использование IF NOT EXISTS

Во многих СУБД можно избежать ошибки, если таблица уже существует, с помощью IF NOT EXISTS:

CREATE TABLE IF NOT EXISTS departments (
    department_id INT PRIMARY KEY,
    department_name VARCHAR(100) NOT NULL
);

Это удобно при повторном запуске учебных скриптов или миграций.


На что стоит обращать внимание

При создании таблиц полезно помнить несколько правил:

  • выбирайте типы данных осознанно, а не «с запасом на всё»;
  • задавайте PRIMARY KEY для таблиц, где каждая строка должна быть уникально идентифицируема;
  • используйте NOT NULL для действительно обязательных полей;
  • добавляйте DEFAULT, если у столбца есть естественное значение по умолчанию;
  • для текстовых полей при необходимости явно задавайте CHARACTER SET и COLLATE;
  • старайтесь делать структуру таблицы понятной и предсказуемой уже на этапе проектирования.

Хорошая схема таблицы снижает количество ошибок и упрощает дальнейшую работу с INSERT, UPDATE и SELECT.


Пример из практики

Представим, что мы создаем таблицу для хранения книг:

CREATE TABLE books (
    book_id INT PRIMARY KEY,
    title VARCHAR(200) NOT NULL,
    author VARCHAR(100) NOT NULL,
    published_date DATE,
    price DECIMAL(8, 2) DEFAULT 0.00
);

После создания такой таблицы в нее уже можно будет добавлять строки с помощью INSERT INTO.


Ключевые выводы этого урока:

  • Оператор CREATE TABLE используется для создания новых таблиц в базе данных.
  • Для каждого столбца необходимо задать имя и тип данных.
  • Ограничения, такие как PRIMARY KEY, NOT NULL, UNIQUE и CHECK, помогают контролировать качество данных.
  • Дополнительные параметры столбцов, такие как DEFAULT, CHARACTER SET и COLLATE, помогают точнее настроить поведение и хранение данных.
  • Хорошо спроектированная таблица делает дальнейшую работу с данными проще и надежнее.
  • IF NOT EXISTS помогает избежать ошибок при повторном создании таблиц.