Как создать базу данных в SQL: команды для MySQL, PostgreSQL и SQL Server

Базу данных в SQL создают командой CREATE DATABASE, потом переключаются на неё и добавляют таблицы через CREATE TABLE.

Показываем команды для MySQL, PostgreSQL, SQL Server и SQLite, схему из двух связанных таблиц с реальным выводом и шесть частых ошибок с решениями.

Статью написал:
Ваня Буявец, продюсер, основатель Checkroi
Ваня Буявец
Основатель Checkroi, продюсер, эксперт в выборе онлайн-курсов
Все 3090 статей автора Подписаться на Телеграм-канал
Одобрено экспертом:
Наташа Буявец, основатель Checkroi, эксперт по онлайн-курсам
Наташа Буявец
Основательница Checkroi, продюсер Youtube-каналов, эксперт по онлайн-курсам
Все 3744 экспертных мнения Подписаться на Телеграм-канал
Обложка: Как создать базу данных в SQL: команды для MySQL, PostgreSQL и SQL Server

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

Ниже порядок действий, команды для четырёх популярных СУБД, схема из двух связанных таблиц с реальным выводом и ошибки, на которых новички теряют больше всего времени. Если вы пока не знаете, чем запрос отличается от таблицы, начните с разбора что такое язык SQL и как он устроен.

CheckroiCheckroiПодборка курсов по SQL422 курса • 40 школСравните цены, школы, программу и найдите выгодные предложения по обучениюСравнить→

Пошаговая инструкция: от пустого сервера до первой записи

Рой подписывает новый пустой шкаф-картотеку для базы данных

Порядок одинаковый для MySQL, PostgreSQL и SQL Server. Отличаются только клиент и команда переключения на базу.

  1. Откройте клиент СУБД. Консоль mysql, psql, SQL Server Management Studio или универсальный DBeaver. Как настроить подключение в DBeaver, мы показали в инструкции по подключению к базе данных в DBeaver.
  2. Создайте базу: CREATE DATABASE shop;. Имя пишите латиницей, строчными буквами и без пробелов, так оно одинаково прочитается в любой СУБД.
  3. Проверьте, что база появилась: SHOW DATABASES; в MySQL, \l в psql, SELECT name FROM sys.databases; в SQL Server.
  4. Переключитесь на неё. Без этого шага таблицы создадутся в той базе, к которой вы были подключены раньше.
  5. Создайте таблицы командой CREATE TABLE и добавьте строки через INSERT.
  6. Сделайте проверочный запрос 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: всё работает на ноутбуке, сервер и пользователей настраивать не нужно.

Канал основателя Checkroi Вани Буявца3 700 человек читают мой Телеграм-канал про нейросетиСобрал промпты для Claude Code и ChatGPT, разборы ИИ-инструментов и лайфхаки по продвижению бизнеса в одном местеПрисоединиться

Таблицы и связи: схема из двух таблиц с выводом

Две таблицы-карточки соединены светящейся нитью связи

Пустая база ничего не хранит. Ниже минимальная схема магазина: покупатели и их заказы. На ней видны все базовые ограничения, которые стоит задать сразу, а не добавлять потом через 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
Нейросети для рабочих задач
Перейти на сайт курса
SkillboxSkillbox31 290 ₽ - 1 месяцОбзор курса
SQL для анализа данных
Перейти на сайт курса
SkillboxSkillbox52 353 ₽6203 ₽/мес.2 месяцаОбзор курса
SQL-разработчик: тариф PRO
Перейти на сайт курса
Академия ЭдюсонЭдюсон89 900 ₽7491 ₽/мес.2 месяцаОбзор курса
SQL-разработчик: тариф Базовый
Перейти на сайт курса
Академия ЭдюсонЭдюсон79 900 ₽3329 ₽/мес.3 месяцаОбзор курса
SQL с нуляSkyproSkypro134 640 ₽5500 ₽/мес.12 месяцевОбзор курса

Больше программ — в полном каталоге курсов по SQL

Часто задаваемые вопросы

Как создать базу данных в SQL?

Выполните команду CREATE DATABASE имя; в клиенте своей СУБД. Затем переключитесь на новую базу: USE имя; в MySQL и SQL Server или \c имя в консоли psql. После этого создавайте таблицы командой CREATE TABLE.

Как посмотреть список баз данных?

В MySQL это SHOW DATABASES;, в консоли PostgreSQL команда \l, в SQL Server запрос SELECT name FROM sys.databases;, в SQLite команда .databases.

Почему в PostgreSQL не работает команда USE?

В PostgreSQL такой команды нет. В консоли psql на другую базу переключаются через \c имя, а в графическом клиенте базу выбирают в настройках подключения.

Можно ли создать базу данных без сервера?

Да, в SQLite. Запустите sqlite3 shop.db: если файла нет, программа создаст новую базу с этим именем. Для учебных задач этого хватает.

Как сделать, чтобы скрипт не падал, если база уже есть?

В MySQL добавьте IF NOT EXISTS: CREATE DATABASE IF NOT EXISTS shop;. В SQL Server оберните команду в проверку IF DB_ID('shop') IS NULL. В PostgreSQL варианта IF NOT EXISTS у CREATE DATABASE нет, наличие базы проверяют запросом к pg_database.

Как удалить базу данных?

Командой DROP DATABASE IF EXISTS имя;. В PostgreSQL нельзя удалить базу, к которой вы сейчас подключены, а в SQL Server нельзя удалить базу, которую кто-то использует. Сначала переключитесь на служебную базу postgres или master. Удалённая база возвращается только из резервной копии.

Читайте Checkroi первым в Google
Добавьте Checkroi в избранные источники — и наши разборы курсов и обзоры школ будут показываться выше в вашей выдаче Google.
Оставить комментарий
0 комментариев
Форма комментария

Оставьте комментарий

Напишите, что думаете. Нам важно ваше мнение!