Yandex Cloud
Поиск
Связаться с намиПодключиться
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
    • Популярные
    • Инфраструктура и сеть
    • Платформа данных
    • Контейнеры
    • Инструменты разработчика
    • Бессерверные вычисления
    • Безопасность
    • Мониторинг и управление ресурсами
    • Машинное обучение
    • Бизнес-инструменты
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Облако для интеграторов
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Контент-программа
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Истории успеха
    • Тарифы Yandex Cloud
    • Промоакции и free tier
    • Правила тарификации
  • Документация
  • Блог
Проект Яндекса
© 2025 ООО «Яндекс.Облако»
Yandex Managed Service for YDB
  • Начало работы
    • Обзор
    • Подключение к БД с помощью YDB CLI
    • Управление базами данных
    • Миграция базы данных в другую зону доступности
    • Управление таблицами и директориями
    • Чтение и запись данных
    • Мониторинг состояния базы данных
  • Управление доступом
  • Метрики Monitoring
  • Аудитные логи Audit Trails
  • Вопросы и ответы
  • Публичные материалы
  • Обучающие курсы

В этой статье:

  • Предварительные требования
  • SQL-запросы в консоли управления
  • Вставьте и измените данные
  • REPLACE
  • UPSERT
  • INSERT
  • UPDATE
  • DELETE
  • Запросите данные при помощи SELECT
  • Сделайте параметризированный запрос
  1. Пошаговые инструкции
  2. Чтение и запись данных

Чтение и запись данных

Статья создана
Yandex Cloud
Улучшена
Обновлена 21 октября 2024 г.
  • Предварительные требования
  • SQL-запросы в консоли управления
  • Вставьте и измените данные
    • REPLACE
    • UPSERT
    • INSERT
    • UPDATE
    • DELETE
  • Запросите данные при помощи SELECT
  • Сделайте параметризированный запрос

Предварительные требованияПредварительные требования

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

SQL-запросы в консоли управленияSQL-запросы в консоли управления

Чтобы отправить SQL-запрос к базе данных из консоли управления:

  1. В консоли управления выберите каталог, в котором находится нужная база данных.
  2. В списке сервисов выберите Managed Service for YDB.
  3. Выберите базу из списка.
  4. Перейдите на вкладку Навигация.
  5. Нажмите кнопку Новый SQL-запрос и введите текст запроса. При составлении запроса вы можете пользоваться шаблонами:
    • Чтобы воспользоваться одним из стандартных шаблонов, выберите его из выпадающего списка справа от кнопки Новый SQL-запрос.
    • Чтобы подставить в шаблон данные определенной таблицы, нажмите на значок в строке с нужной таблицей и выберите шаблон.
  6. Нажмите кнопку Выполнить.

Вставьте и измените данныеВставьте и измените данные

Для вставки данных в YDB используются инструкции REPLACE, UPSERT и INSERT.

При выполнении инструкций REPLACE и UPSERT осуществляется слепая запись. При выполнении инструкции INSERT перед операцией записи выполняется операция чтения данных. Это позволяет убедиться, что уникальность первичного ключа будет соблюдена.

Использование инструкций REPLACE и UPSERT предпочтительнее при операциях записи и изменения данных.

Одним запросом REPLACE, UPSERT или INSERT можно вставить в таблицу несколько строк.

Важно

В консоль управления YQL включена PRAGMA AutoCommit. Это означает, что после каждого запроса автоматически будет выполняться COMMIT. Например, если вы введете несколько выражений (как показано в примере ниже) и выполните запрос, после запроса автоматически будет выполнен COMMIT.

REPLACE INTO episodes (series_id, season_id, episode_id, title) VALUES (1, 1, 1, "Yesterday's Jam");
REPLACE INTO episodes (series_id, season_id, episode_id, title) VALUES (1, 1, 2, "Calamity Jen");

REPLACEREPLACE

После создания таблиц series, seasons и episodes можно вставить данные в таблицу с помощью инструкции REPLACE. Базовый синтаксис:

REPLACE INTO <имя_таблицы> (<список_столбцов>) VALUES (<список_добавляемых_значений>);

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

Примечание

При выполнении операции REPLACE осуществляется слепая запись. Для операций записи или изменения данных предпочтительнее использовать инструкции REPLACE или UPSERT.

Данные, добавленные с помощью следующего примера кода, будут использоваться далее в этом разделе.

REPLACE INTO series (series_id, title, release_date, series_info)
VALUES
  (
    1,
    "IT Crowd",
    CAST(Date("2006-02-03") AS Uint64),
    "The IT Crowd is a British sitcom produced by Channel 4, written by Graham Linehan, produced by Ash Atalla and starring Chris O'Dowd, Richard Ayoade, Katherine Parkinson, and Matt Berry."
  ),
  (
    2,
    "Silicon Valley",
    CAST(Date("2014-04-06") AS Uint64),
    "Silicon Valley is an American comedy television series created by Mike Judge, John Altschuler and Dave Krinsky. The series focuses on five young men who founded a startup company in Silicon Valley."
  )
;

REPLACE INTO seasons (series_id, season_id, title, first_aired, last_aired)
VALUES
  (1, 1, "Season 1", CAST(Date("2006-02-03") AS Uint64), CAST(Date("2006-03-03") AS Uint64)),
  (1, 2, "Season 2", CAST(Date("2007-08-24") AS Uint64), CAST(Date("2007-09-28") AS Uint64)),
  (2, 1, "Season 1", CAST(Date("2014-04-06") AS Uint64), CAST(Date("2014-06-01") AS Uint64)),
  (2, 2, "Season 2", CAST(Date("2015-04-12") AS Uint64), CAST(Date("2015-06-14") AS Uint64))
;

REPLACE INTO episodes (series_id, season_id, episode_id, title, air_date)
VALUES
  (1, 1, 1, "Yesterday's Jam", CAST(Date("2006-02-03") AS Uint64)),
  (1, 1, 2, "Calamity Jen", CAST(Date("2006-02-03") AS Uint64)),
  (2, 1, 1, "Minimum Viable Product", CAST(Date("2014-04-06") AS Uint64)),
  (2, 1, 2, "The Cap Table", CAST(Date("2014-04-13") AS Uint64))
;

UPSERTUPSERT

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

Примечание

При выполнении операции UPSERT осуществляется слепая запись. Для записи предпочтительнее использовать инструкции REPLACE или UPSERT.

Код, приведенный ниже, вставит в таблицу episodes одну строчку с данными.

UPSERT INTO episodes
(
  series_id,
  season_id,
  episode_id,
  title,
  air_date
)
VALUES
(
  2,
  1,
  3,
  "Test Episode",
  CAST(Date("2018-08-27") AS Uint64)
)
;

INSERTINSERT

Инструкция INSERT используется для вставки одной или нескольких строк. При попытке вставить строку в таблицу, с уже существующим значением первичного ключа YDB вернет ошибку с сообщением Transaction rolled back due to constraint violation: insert_pk..

Примечание

При выполнении операции INSERT перед записью осуществляется чтение данных. Это делает ее менее эффективной, чем операции REPLACE и UPSERT. Для записи предпочтительнее использовать операции REPLACE или UPSERT.

Код, приведенный ниже, вставит в таблицу episodes одну строчку с данными.

INSERT INTO episodes
(
  series_id,
  season_id,
  episode_id,
  title,
  air_date
)
VALUES
(
  2,
  5,
  21,
  "Test 21",
  CAST(Date("2018-08-27") AS Uint64)
)
;

UPDATEUPDATE

Инструкция UPDATE изменяет значения колонок для строк таблицы, отфильтрованных по предикату из условия WHERE. Базовый синтаксис:

UPDATE <имя_таблицы> SET <имя_столбца_1>=<новое_значение_столбца_1>, ... ,<имя_столбца_N>=<новое_значение_столбца_N> WHERE <условия_для_фильтра_строк>;

Значения первичного ключа в рамках инструкции UPDATE не могут быть изменены. Введите и выполните следующую инструкцию UPDATE, чтобы изменить значение столбца title для эпизода со значениями столбцов series_id = 2, season_id = 1и episode_id = 3 со значения "Test Episode" на значение "Test Episode Updated".

UPDATE episodes
SET title="Test Episode Updated"
WHERE
  series_id = 2
  AND season_id = 1
  AND episode_id = 3
;

DELETEDELETE

Инструкция DELETE удаляет строки таблицы, отфильтрованные по предикату из условия WHERE. Код, приведенный ниже, удалит из таблицы episodes эпизод со следующими значениями столбцов: series_id = 2, season_id = 5, и episode_id = 21.

DELETE
FROM episodes
WHERE
  series_id = 2
  AND season_id = 5
  AND episode_id = 21
;

Запросите данные при помощи SELECTЗапросите данные при помощи SELECT

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

Чтобы запросить данные из таблицы series, выполните код, представленный ниже.

SELECT
  series_id,
  title AS series_title,
  CAST (release_date AS Date) AS release_date
FROM series;

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

SELECT
  *
FROM series;

Примечание

Подробнее о том, как запросить данные по вторичному индексу, читайте в документации YQL.

Сделайте параметризированный запросСделайте параметризированный запрос

Использование параметризованных запросов может улучшить производительность за счет сокращения частоты выполнения компиляции и перекомпиляции запросов.

Пример

DECLARE $seriesId AS Uint64;
DECLARE $seasonId AS Uint64;

$seriesId = 1;
$seasonId = 2;

SELECT sa.title AS season_title, sr.title AS series_title
FROM seasons AS sa
INNER JOIN series AS sr
ON sa.series_id = sr.series_id
WHERE sa.series_id = $seriesId AND sa.season_id = $seasonId;

Была ли статья полезна?

Предыдущая
Управление таблицами и директориями
Следующая
Мониторинг состояния базы данных
Проект Яндекса
© 2025 ООО «Яндекс.Облако»