До этого мы в основном работали с уже существующими таблицами и извлекали из них данные. Но в реальной работе с базой данных важно не только читать информацию, но и уметь создавать структуру хранения данных. Для этого используется оператор 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) задают правила для данных в таблице.
PRIMARY KEYПервичный ключ уникально идентифицирует каждую строку таблицы.
CREATE TABLE students (
student_id INT PRIMARY KEY,
first_name VARCHAR(50),
last_name VARCHAR(50)
);
Столбец student_id не может содержать дубликаты и NULL.
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 нельзя оставить пустыми.
CHECKОграничение CHECK задает условие, которому должны соответствовать значения в столбце.
CREATE TABLE products (
product_id INT PRIMARY KEY,
product_name VARCHAR(100) NOT NULL,
price DECIMAL(10, 2) CHECK (price >= 0)
);
В этом примере база данных не позволит сохранить товар с отрицательной ценой.
Помимо ограничений, у столбцов есть и дополнительные параметры. Они не запрещают или не разрешают значения напрямую, но помогают задать поведение столбца более точно.
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.
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 помогает избежать ошибок при повторном создании таблиц.