Чтение и запись данных
Предварительные требования
Для выполнения запросов понадобится создать базу данных и таблицу в ней.
SQL-запросы в консоли управления
Чтобы отправить SQL-запрос к базе данных из консоли управления:
- В консоли управления
выберите каталог, в котором находится нужная база данных. - В списке сервисов выберите Managed Service for YDB.
- Выберите базу из списка.
- Перейдите на вкладку Навигация.
- Нажмите кнопку Новый SQL-запрос и введите текст запроса. При составлении запроса вы можете пользоваться шаблонами:
- Чтобы воспользоваться одним из стандартных шаблонов, выберите его из выпадающего списка справа от кнопки Новый SQL-запрос.
- Чтобы подставить в шаблон данные определенной таблицы, нажмите на значок
в строке с нужной таблицей и выберите шаблон.
- Нажмите кнопку Выполнить.
Вставьте и измените данные
Для вставки данных в YDB используются инструкции REPLACE
При выполнении инструкций 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");
REPLACE
После создания таблиц series
, seasons
и episodes
можно вставить данные в таблицу с помощью инструкции REPLACE
REPLACE INTO <имя_таблицы> (<список_столбцов>) VALUES (<список_добавляемых_значений>);
Инструкция REPLACE
Примечание
При выполнении операции 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))
;
UPSERT
Инструкция UPSERT
Примечание
При выполнении операции 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)
)
;
INSERT
Инструкция INSERTTransaction 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)
)
;
UPDATE
Инструкция UPDATE
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
;
DELETE
Инструкция DELETEepisodes
эпизод со следующими значениями столбцов: 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
Чтобы запросить данные из таблицы 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;