Чтобы создать базу данных в SQL, подключитесь к серверу своей СУБД и выполните одну команду: CREATE DATABASE shop;. Потом переключитесь на новую базу (USE shop; в MySQL и SQL Server, \c shop в консоли PostgreSQL) и создайте таблицы командой CREATE TABLE. В SQLite отдельной команды нет: база хранится в одном файле, и он появляется при первом подключении.
Ниже порядок действий, команды для четырёх популярных СУБД, схема из двух связанных таблиц с реальным выводом и ошибки, на которых новички теряют больше всего времени. Если вы пока не знаете, чем запрос отличается от таблицы, начните с разбора что такое язык SQL и как он устроен.
Пошаговая инструкция: от пустого сервера до первой записи

Порядок одинаковый для MySQL, PostgreSQL и SQL Server. Отличаются только клиент и команда переключения на базу.
- Откройте клиент СУБД. Консоль
mysql,psql, SQL Server Management Studio или универсальный DBeaver. Как настроить подключение в DBeaver, мы показали в инструкции по подключению к базе данных в DBeaver. - Создайте базу:
CREATE DATABASE shop;. Имя пишите латиницей, строчными буквами и без пробелов, так оно одинаково прочитается в любой СУБД. - Проверьте, что база появилась:
SHOW DATABASES;в MySQL,\lв psql,SELECT name FROM sys.databases;в SQL Server. - Переключитесь на неё. Без этого шага таблицы создадутся в той базе, к которой вы были подключены раньше.
- Создайте таблицы командой
CREATE TABLEи добавьте строки черезINSERT. - Сделайте проверочный запрос
SELECT: если данные вернулись, база готова к работе.
Так выглядит весь путь в консоли MySQL:
CREATE DATABASE IF NOT EXISTS shop
CHARACTER SET utf8mb4
COLLATE utf8mb4_0900_ai_ci;
SHOW DATABASES;
USE shop;
SELECT DATABASE();
Последняя строка возвращает имя текущей базы. Удобно проверять перед тем, как создавать таблицы.
Команды для MySQL, PostgreSQL, SQL Server и SQLite
Сам CREATE DATABASE почти везде пишется одинаково. Расходятся вспомогательные команды: как посмотреть список баз, как на неё переключиться и как подстраховаться от ошибки «база уже есть».
| Действие | MySQL | PostgreSQL | SQL Server | SQLite |
|---|---|---|---|---|
| Создать | CREATE DATABASE shop; |
CREATE DATABASE shop; |
CREATE DATABASE shop; |
sqlite3 shop.db |
| Без ошибки, если уже есть | IF NOT EXISTS |
нет такого варианта | IF DB_ID('shop') IS NULL перед командой |
файл просто откроется |
| Список баз | SHOW DATABASES; |
\l |
SELECT name FROM sys.databases; |
.databases |
| Переключиться | USE shop; |
\c shop |
USE shop; |
открыть другой файл |
| Удалить | DROP DATABASE IF EXISTS shop; |
DROP DATABASE IF EXISTS shop; |
DROP DATABASE IF EXISTS shop; |
удалить файл |
MySQL
В MySQL CREATE SCHEMA работает как синоним CREATE DATABASE, это сказано в справке MySQL по CREATE DATABASE. Там же написано, что для команды нужна привилегия CREATE, а без IF NOT EXISTS повторное создание закончится ошибкой.
Кодировку лучше указывать явно. По умолчанию сервер MySQL 8 берёт utf8mb4 и utf8mb4_0900_ai_ci (настройки набора символов сервера), но администратор мог поменять их в конфиге, и кириллица тогда превратится в вопросики.
PostgreSQL
Варианта IF NOT EXISTS у CREATE DATABASE в PostgreSQL нет: в описании команды его не найти. Там же два ограничения, из-за которых чаще всего падают скрипты миграций:
- создавать базы может только суперпользователь или роль с правом
CREATEDB; CREATE DATABASEнельзя выполнять внутри блока транзакции.
Кодировка и локаль новой базы должны совпадать с шаблоном. Чтобы задать другие, добавьте TEMPLATE template0:
CREATE DATABASE shop
ENCODING 'UTF8'
TEMPLATE template0;
Команды USE в PostgreSQL нет. В консоли psql на базу переключает \c shop, а \l выводит список баз с владельцами и кодировками (справка по psql). В графическом клиенте базу выбирают в настройках подключения, как в инструкции по подключению DBeaver к PostgreSQL. Создание таблиц мышкой разобрано в статье как создать таблицу в pgAdmin 4.
SQL Server
В SQL Server базу можно создать без кода. В обозревателе объектов щёлкните правой кнопкой мыши узел Базы данных, выберите Создать базу данных, введите имя и нажмите ОК. Порядок и права описаны в руководстве Microsoft по созданию базы данных.
Для T-SQL понадобится разрешение CREATE DATABASE в базе master либо CREATE ANY DATABASE или ALTER ANY DATABASE. Команда не работает внутри явной транзакции. Безопасный вариант для скрипта:
IF DB_ID('shop') IS NULL
CREATE DATABASE shop;
GO
USE shop;
GO
SQLite
SQLite не нужен сервер. Запустите sqlite3 shop.db: если файла нет, программа создаст новую базу с этим именем (документация консоли sqlite3). Для первых упражнений мы советуем именно SQLite: всё работает на ноутбуке, сервер и пользователей настраивать не нужно.
Таблицы и связи: схема из двух таблиц с выводом

Пустая база ничего не хранит. Ниже минимальная схема магазина: покупатели и их заказы. На ней видны все базовые ограничения, которые стоит задать сразу, а не добавлять потом через ALTER TABLE.
PRAGMA foreign_keys = ON;
CREATE TABLE customers (
id INTEGER PRIMARY KEY,
name VARCHAR(100) NOT NULL,
email VARCHAR(255) UNIQUE,
city VARCHAR(50)
);
CREATE TABLE orders (
id INTEGER PRIMARY KEY,
customer_id INTEGER NOT NULL REFERENCES customers(id),
amount DECIMAL(10, 2) CHECK (amount > 0),
created_at DATE NOT NULL
);
INSERT INTO customers (name, email, city) VALUES
('Анна Петрова', 'anna@example.ru', 'Казань'),
('Игорь Смирнов', 'igor@example.ru', 'Пермь');
INSERT INTO orders (customer_id, amount, created_at) VALUES
(1, 2490.00, '2026-10-01'),
(1, 990.00, '2026-10-12'),
(2, 15400.00, '2026-10-20');
SELECT c.name, COUNT(o.id) AS orders, SUM(o.amount) AS total
FROM customers c
JOIN orders o ON o.customer_id = c.id
GROUP BY c.name;
Вывод в SQLite 3.51:
name orders total
------------- ------ -----
Анна Петрова 2 3480
Игорь Смирнов 1 15400
Что здесь делает каждое ограничение:
- PRIMARY KEY задаёт уникальный номер строки, по нему на неё ссылаются другие таблицы;
- NOT NULL запрещает пустое значение. Чем пустое значение отличается от нуля и пустой строки, читайте в статье про NULL в SQL;
- UNIQUE не даст завести двух покупателей с одним email;
- REFERENCES (внешний ключ) не пустит заказ с несуществующим покупателем;
- CHECK отсекает заведомо неверные значения, здесь отрицательную сумму.
Если попробовать добавить заказ покупателю № 7, которого нет, SQLite ответит так:
Runtime error near line 2: FOREIGN KEY constraint failed (19)
Автоинкремент номера пишется в каждой СУБД по-своему. Код выше переносится почти без правок, меняется только объявление id:
| СУБД | Объявление столбца id |
|---|---|
| MySQL | id INT AUTO_INCREMENT PRIMARY KEY |
| PostgreSQL | id INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY |
| SQL Server | id INT IDENTITY(1,1) PRIMARY KEY |
| SQLite | id INTEGER PRIMARY KEY |
Дальше с этими таблицами можно тренировать запросы: выборки через SELECT, WHERE и JOIN, подсчёт строк по группам через COUNT и уникальные значения через DISTINCT.
Частые ошибки и что с ними делать

«База уже существует»
Скрипт запускают второй раз, и он падает на первой же строке. В MySQL добавьте IF NOT EXISTS, в SQL Server оберните команду в проверку DB_ID. В PostgreSQL такой оговорки нет, поэтому проверяйте наличие базы запросом к pg_database или вынесите создание базы из скрипта миграции.
Для таблиц CREATE TABLE IF NOT EXISTS работает в MySQL, PostgreSQL и SQLite, а в SQL Server наличие таблицы проверяют через OBJECT_ID. Без такой проверки SQLite отвечает так:
Parse error near line 1: table customers already exists
Нет прав на создание базы
Обычный пользователь, которого выдал хостинг или администратор, часто может работать только в своей базе.
Решение: попросите у администратора право CREATEDB в PostgreSQL, привилегию CREATE в MySQL или разрешение CREATE DATABASE в SQL Server. На учебном компьютере проще подключиться под суперпользователем.
Таблицы оказались не в той базе
Базу создали, но забыли переключиться, и CREATE TABLE отработал в базе по умолчанию.
Решение: перед созданием таблиц проверьте текущую базу через SELECT DATABASE(); в MySQL, SELECT current_database(); в PostgreSQL или SELECT DB_NAME(); в SQL Server.
В PostgreSQL не находится таблица с заглавными буквами
Таблицу назвали "Customers" в кавычках, а потом обращаются к Customers без кавычек. PostgreSQL переводит идентификаторы без кавычек в нижний регистр, а имя в кавычках становится чувствительным к регистру (раздел о лексической структуре SQL).
Решение: называйте базы, таблицы и столбцы строчными буквами через подчёркивание (order_items, а не OrderItems). Кавычки тогда не понадобятся вообще.
Внешний ключ в SQLite ничего не проверяет
Заказ с несуществующим покупателем спокойно записался. В SQLite проверка внешних ключей по умолчанию выключена и включается отдельно для каждого подключения командой PRAGMA foreign_keys = ON; (документация SQLite по внешним ключам).
Без этой строки та же вставка заказа для покупателя № 7 проходит молча, и в таблице становится четыре заказа вместо трёх.
Базу не получается удалить
В PostgreSQL нельзя удалить базу, к которой вы сейчас подключены (описание DROP DATABASE). В SQL Server нельзя удалить базу, которую кто-то использует (справка по DROP DATABASE).
Решение: переключитесь на служебную базу (postgres или master) и только потом выполняйте DROP DATABASE. Удалённая база возвращается только из резервной копии.
Где освоить SQL системно
Создать базу и пару таблиц можно за вечер по этой инструкции. Проектировать схему под реальный проект, писать запросы на сотни строк и настраивать права пользователей учат на курсах: там дают задачи на живых данных и проверяют решения.
Если думаете сделать работу с базами профессией, посмотрите, как стать SQL-разработчиком и чем занимается администратор баз данных. Все программы по теме собраны в разделе курсы SQL, а ниже пять из них с ценами и рейтингом.
| Курс | Школа | Стоимость со скидкой | В рассрочку | Длительность | Обзор курса от Checkroi |
|---|---|---|---|---|---|
| Нейросети для рабочих задач Перейти на сайт курса | 31 290 ₽ | - | 1 месяц | Обзор курса | |
| SQL для анализа данных Перейти на сайт курса | 52 353 ₽ | 6203 ₽/мес. | 2 месяца | Обзор курса | |
| SQL-разработчик: тариф PRO Перейти на сайт курса | 89 900 ₽ | 7491 ₽/мес. | 2 месяца | Обзор курса | |
| SQL-разработчик: тариф Базовый Перейти на сайт курса | 79 900 ₽ | 3329 ₽/мес. | 3 месяца | Обзор курса | |
| SQL с нуля | 134 640 ₽ | 5500 ₽/мес. | 12 месяцев | Обзор курса |
Больше программ — в полном каталоге курсов по SQL




