Основы баз данных и язык SQL

Курс охватывает ключевые аспекты работы с реляционными базами данных и языком SQL, необходимым для управления информацией [journal.sovcombank.ru](https://journal.sovcombank.ru/tehnologii/yazik-sql-chto-eto-takoe-kak-rabotaet-i-gde-vostrebovan). Вы научитесь создавать таблицы и выполнять запросы [productstar.ru](https://productstar.ru/blog/kak-sozdat-bazu-dannykh-v-sql), а также узнаете о принципах ACID, обеспечивающих надежность хранения данных [aws.amazon.com](https://aws.amazon.com/ru/what-is/sql-database/).

1. Введение в SQL: что такое реляционные базы данных и таблицы

Введение в SQL: что такое реляционные базы данных и таблицы

В современном мире данные — это новая нефть. Каждое действие в интернете, будь то лайк в социальной сети, банковская транзакция или заказ такси, генерирует информацию. Чтобы эта информация не превратилась в хаос, её необходимо структурировать, хранить и быстро извлекать. Для этого существуют базы данных.

Отличия базы данных от СУБД

Новички часто путают понятия «база данных» и «СУБД». Разберемся в терминологии.

* База данных (БД) — это само организованное хранилище информации. Это файлы, лежащие на диске, в которых записаны ваши данные. * СУБД (Система Управления Базами Данных) — это программное обеспечение, которое позволяет создавать базы данных, обновлять их и управлять доступом к ним.

Представьте библиотеку. Книги на полках — это база данных. Библиотекарь, который знает, где лежит нужная книга, выдает её вам и следит за порядком — это СУБД. Вы (пользователь или программа) не идете искать книгу сами, вы делаете запрос библиотекарю.

Наиболее популярными СУБД в мире являются PostgreSQL, MySQL, Oracle и Microsoft SQL Server. Все они относятся к классу реляционных СУБД.

Реляционная модель и таблицы

Слово «реляционный» происходит от английского relation (отношение). В теории баз данных «отношение» — это математический термин, но на практике его проще всего представить в виде таблицы.

Реляционная база данных — это набор взаимосвязанных таблиц. Эта модель была предложена Эдгаром Коддом в 1970 году и стала стандартом индустрии благодаря своей простоте и надежности selectel.ru.

В отличие от электронных таблиц (например, Excel), где в одной ячейке может быть текст, а в соседней — картинка или формула, реляционные таблицы имеют строгую структуру.

!Структура реляционной таблицы: столбцы, строки и ячейки

Структура таблицы

Любая таблица в реляционной базе данных состоит из трех ключевых элементов:

  • Столбцы (Атрибуты/Поля). Каждый столбец имеет уникальное имя и определенный тип данных. Если столбец называется price (цена), то в нем могут храниться только числа. Вы не сможете записать туда слово «дорого». Это обеспечивает целостность данных.
  • Строки (Записи/Кортежи). Каждая строка — это отдельный объект. Например, в таблице Users (Пользователи) одной строкой будет информация об одном конкретном человеке: его имя, email, возраст.
  • Ячейки. Пересечение строки и столбца, где хранится конкретное атомарное значение.
  • Пример таблицы Products (Товары):

    | id | name | price | category | | :--- | :--- | :--- | :--- | | 1 | iPhone 15 | 999 | Smartphone | | 2 | MacBook Air | 1200 | Laptop | | 3 | AirPods | 150 | Audio |

    Здесь name, price, category — это атрибуты. А строка 2 | MacBook Air | 1200 | Laptop — это запись о конкретном товаре.

    Первичный ключ (Primary Key)

    Обратите внимание на столбец id в примере выше. Это первичный ключ. В реляционной базе данных каждая строка должна быть уникально идентифицируема.

    Мы не можем использовать имя товара или имя человека в качестве идентификатора, так как они могут повторяться (в магазине может быть два разных товара с названием «USB кабель»). Поэтому создается специальный столбец, обычно называемый id, который содержит уникальное числовое значение для каждой записи.

    Основные требования к первичному ключу: * Уникальность: значения не могут повторяться. * Непустота: у каждой записи обязательно должен быть ключ.

    Связи между таблицами

    Сила реляционных баз данных не просто в хранении таблиц, а в умении их связывать. Представьте, что у нас есть интернет-магазин. У нас есть информация о пользователях и о заказах.

    Вместо того чтобы хранить всё в одной гигантской таблице (где для каждого заказа пришлось бы заново писать имя и адрес покупателя), мы разделяем данные на две таблицы: Users и Orders.

    В таблице Orders мы просто укажем user_id — ссылку на первичный ключ из таблицы Users.

    !Связь между таблицами через внешний ключ

    Такой подход позволяет: * Избежать дублирования информации. * Экономить место на диске. * Легко менять данные (если пользователь сменил фамилию, мы меняем её только в таблице Users, а все исторические заказы автоматически ссылаются на верного человека).

    Что такое SQL?

    Чтобы взаимодействовать с СУБД, нужен язык, который она понимает. Таким языком является SQL (Structured Query Language — язык структурированных запросов).

    SQL — это декларативный язык. Это означает, что вы говорите системе, что вы хотите получить, а не как это сделать. СУБД сама решает, как именно найти и извлечь данные наиболее эффективным способом ru.hexlet.io.

    С помощью SQL можно выполнять четыре базовые операции, часто объединяемые аббревиатурой CRUD:

  • Create — создание новых данных (добавление строк).
  • Read — чтение данных (поиск и выборка).
  • Update — обновление существующих данных.
  • Delete — удаление данных.
  • Пример простого SQL-запроса, который просит базу данных показать все товары дороже 500 долларов:

    Этот код понятен даже интуитивно: «ВЫБРАТЬ всё ИЗ таблицы Products ГДЕ цена больше 500». Именно благодаря своей простоте и близости к естественному английскому языку SQL стал мировым стандартом.

    Итоги

    В этой статье мы познакомились с фундаментом, на котором строятся современные информационные системы.

  • СУБД — это программа-библиотекарь, а База данных — это архив с книгами (данными).
  • Реляционные базы данных хранят информацию в виде строгих таблиц, состоящих из строк и столбцов.
  • Каждая строка в таблице должна иметь уникальный идентификатор — первичный ключ.
  • Таблицы могут ссылаться друг на друга, образуя связи, что позволяет эффективно хранить сложные данные.
  • SQL — это специальный язык для управления данными, с помощью которого мы отправляем команды СУБД.
  • 2. Создание структуры: типы данных и команды CREATE DATABASE и TABLE

    Создание структуры: типы данных и команды CREATE DATABASE и TABLE

    В предыдущей лекции мы разобрали теорию: узнали, что базы данных состоят из таблиц, а таблицы — из строк и столбцов. Теперь пришло время перейти от теории к практике. Чтобы начать хранить данные, мы должны сначала создать для них «дом» (базу данных) и «комнаты» (таблицы).

    В языке SQL за создание структуры отвечает группа команд DDL (Data Definition Language — язык определения данных). Сегодня мы изучим главные из них: CREATE DATABASE и CREATE TABLE.

    Создание базы данных

    Прежде чем создавать таблицы, нужно создать саму базу данных (БД). Представьте, что вы хотите купить шкаф. Вы не можете начать собирать полки, пока не выделили место в комнате и не купили каркас шкафа. База данных — это и есть этот каркас.

    Синтаксис создания базы данных предельно прост:

    Например, если мы делаем базу для онлайн-магазина, команда будет выглядеть так:

    Защита от ошибок

    Если вы попытаетесь создать базу данных с именем, которое уже существует, СУБД вернет ошибку и остановит выполнение скрипта. Чтобы этого избежать, профессионалы используют конструкцию IF NOT EXISTS (если не существует) blog.skillfactory.ru.

    Эта команда говорит системе: «Создай базу online_shop, только если её еще нет. Если она есть — ничего не делай и не выдавай ошибку».

    Выбор базы данных

    После создания базы данных нужно явно указать СУБД, что мы хотим работать именно с ней. В MySQL и многих других системах для этого используется команда USE:

    Без этой команды ваши последующие запросы могут не сработать, так как система не будет знать, в какой именно базе данных создавать таблицы.

    Типы данных в SQL

    При создании таблицы мы обязаны указать, какие именно данные будут храниться в каждом столбце. В Excel вы можете написать в одной ячейке число, а в другой — текст. В SQL это недопустимо. Если столбец предназначен для цен, в нем могут быть только числа.

    Это называется строгая типизация. Она защищает данные от хаоса.

    !Визуализация принципа строгой типизации: каждому типу данных свой контейнер

    Рассмотрим основные типы данных, которые покрывают 90% задач codechick.io.

    1. Числовые типы

    * INT (Integer) — целые числа. Используется для идентификаторов (id), количества товара, возраста. Диапазон: от -2 млрд до +2 млрд. * DECIMAL(p, s) — числа с фиксированной точкой (дробные). Идеально для денег, где важна точность до копейки. * p (precision) — общее количество цифр. * s (scale) — количество цифр после запятой.

    Пример: DECIMAL(5, 2) может хранить число 123.45 (всего 5 цифр, 2 после точки), но не сможет сохранить 1234.56 (нужно 6 цифр).

    2. Строковые типы

    * VARCHAR(n) — строка переменной длины. n — это максимальное количество символов. Если вы объявили VARCHAR(100), но записали слово из 5 букв, база данных займет место только под 5 букв (плюс служебные байты). Это самый популярный тип для имен, email, адресов. * TEXT — используется для длинных текстов (статьи, комментарии, описания товаров), когда мы заранее не знаем длину строки.

    3. Типы даты и времени

    * DATE — хранит только дату (ГГГГ-ММ-ДД). Например: 2023-12-31. * DATETIME или TIMESTAMP — хранит дату и время. Например: 2023-12-31 23:59:59.

    Создание таблицы (CREATE TABLE)

    Теперь, когда мы знаем типы данных, мы можем создать таблицу. Команда CREATE TABLE требует указать имя таблицы и список столбцов с их настройками.

    Общий синтаксис:

    Ограничения (Constraints)

    Помимо типа данных, мы можем задать правила для каждого столбца. Это называется ограничениями timeweb.com.

  • PRIMARY KEY — указывает, что столбец является первичным ключом (уникальный идентификатор строки).
  • AUTO_INCREMENT (в MySQL) — автоматически увеличивает значение на 1 для каждой новой строки. Вам не нужно вручную придумывать id.
  • NOT NULL — запрещает оставлять поле пустым. Например, у пользователя обязательно должен быть email.
  • UNIQUE — гарантирует, что значения в столбце не повторяются (актуально для email или логинов).
  • DEFAULT — подставляет значение по умолчанию, если вы его не указали.
  • Практический пример

    Давайте создадим таблицу Users (Пользователи) для нашего магазина. Нам нужны следующие данные: * Уникальный номер (ID). * Имя пользователя. * Электронная почта. * Баланс на счете. * Дата регистрации.

    Код создания таблицы будет выглядеть так:

    Разбор кода по строкам:

  • id INT PRIMARY KEY AUTO_INCREMENT: Столбец id — это целое число, главный ключ. База данных сама будет назначать номера: 1, 2, 3...
  • username VARCHAR(50) NOT NULL: Имя — строка до 50 символов, пустой быть не может.
  • email VARCHAR(100) NOT NULL UNIQUE: Почта — строка до 100 символов, обязательна к заполнению, и в таблице не может быть двух одинаковых email.
  • balance DECIMAL(10, 2) DEFAULT 0.00: Баланс — число с копейками. Если при создании пользователя мы не укажем баланс, он автоматически станет равен 0.00.
  • created_at DATETIME DEFAULT CURRENT_TIMESTAMP: Дата регистрации. Если мы не укажем время, система автоматически подставит текущее время момента создания записи.
  • Удаление базы данных и таблиц

    Иногда нужно удалить созданную структуру. Для этого используется команда DROP. Будьте предельно осторожны: эта команда удаляет структуру вместе со всеми данными внутри безвозвратно.

    * Удалить таблицу: * Удалить базу данных целиком:

    Итоги

    Мы научились создавать фундамент для работы с данными.

  • Команда CREATE DATABASE создает новое хранилище данных. Используйте IF NOT EXISTS для предотвращения ошибок.
  • Команда USE выбирает активную базу данных для работы.
  • Типы данных определяют, что можно хранить в столбце: INT для целых чисел, DECIMAL для денег, VARCHAR для текста, DATETIME для времени.
  • Команда CREATE TABLE создает таблицу. В ней мы перечисляем столбцы и их настройки.
  • Ограничения (PRIMARY KEY, NOT NULL, UNIQUE) помогают поддерживать качество и целостность данных, запрещая ввод некорректной информации.