Добавление строк: INSERT
До сих пор ваши запросы только читали данные: о чём бы вы ни спросили, таблицы оставались прежними. Но данные магазина постоянно меняются. Приходят новые клиенты, цены растут и падают, поступают заказы. В этом уроке вы узнаете инструкции, которые меняют данные: INSERT добавляет строки, UPDATE изменяет их, а DELETE удаляет.
Новая строка добавляется с помощью INSERT INTO. Эта инструкция добавляет в магазин новую игру:
INSERT INTO games (id, title, genre, price, released, age_rating)
VALUES (21, 'Snow Patrol', 'Action', 20, '2026-03-12', 12);После INSERT INTO идёт таблица и, в скобках, столбцы, которые вы заполняете. После VALUES идут значения, тоже в скобках и в том же порядке: первое значение попадает в первый столбец, второе — во второй и так далее. Текст и даты пишутся в одинарных кавычках, а числа — без них, как и в WHERE. А NULL, как всегда, означает отсутствие значения.
INSERT ничего не ищет, поэтому таблицы с результатом у него нет. Вместо неё на вкладке «Результаты» показано, сколько строк изменено: Изменено строк: 1. Чтобы увидеть новую строку, запросите её в том же файле, ниже INSERT:
SELECT *
FROM games
WHERE id = 21;| id | title | genre | price | released | age_rating |
|---|---|---|---|---|---|
| 21 | Snow Patrol | Action | 20 | 2026-03-12 | 12 |
Каждый запуск начинается со свежей копии базы данных. INSERT добавляет Snow Patrol, запрос под ним показывает игру, а когда вы нажимаете «Запустить» ещё раз, база возвращается к тому, какой была в начале, и INSERT добавляет игру снова. Так что в этом курсе сломать ничего нельзя: экспериментируйте сколько угодно. Это значит и то, что инструкции, которые меняют данные, и запросы, которые показывают изменение, должны быть в одном файле. Вкладка «Таблицы» всегда показывает таблицы такими, какие они в начале, до запуска ваших инструкций. (В настоящей базе данных изменение остаётся насовсем. Поэтому этот урок учит ещё и осторожности.)
Список столбцов можно не писать: тогда INSERT INTO games VALUES (21, 'Snow Patrol', …); требует значение для каждого столбца таблицы, в том порядке, в каком они в ней идут. Программисты так не делают. Такую инструкцию труднее читать (какое из чисел — цена, а какое — возраст?), а когда в таблице однажды появится новый столбец, она перестанет работать. Всегда перечисляйте столбцы.
Типичная ошибка: значения не соответствуют столбцам. Если значений больше или меньше, чем столбцов, SQLite сообщает об этом, например 4 values for 3 columns. Хуже, когда значения идут в неправильном порядке: при (price, age_rating) и VALUES (12, 20) игра будет стоить $12 и рассчитана на возраст от 20 лет, и никакой ошибки вы не увидите. Проверьте, что каждое значение стоит под своим столбцом.
Задание
- 1
В магазине появился новый клиент: Ruby Ward из Leeds, с адресом электронной почты
ruby.ward@mail.com. Она зарегистрировалась 2026-01-12, а магазин ей порекомендовал Noah Wilson, клиент с ID 4. Добавьте её в таблицуcustomersс ID 15. Перечислите вINSERTвсе шесть столбцов. - 2
Ниже
INSERTпокажите все столбцы клиентов с ID больше 12, отсортировав их по ID. Последняя строка — Ruby:id name email city joined referred_by 13 Sophie Adams sophie.adams@mail.com Manchester 2025-08-21 11 14 Max Baker max.baker@mail.com Bristol 2025-10-03 NULL 15 Ruby Ward ruby.ward@mail.com Leeds 2026-01-12 4 - 3
В магазине появится и новая игра: Pirate's Cove, приключенческая игра за $25 для возраста от 12 лет, которая выйдет 2026-04-03. Добавьте её с ID 21 (обратите внимание на апостроф в названии). Затем покажите название, цену и дату выхода всех приключенческих игр (жанр
Adventure), отсортировав их по названию:title price released Lost Temple 20 2022-04-07 Mystery Manor 25 NULL Ocean Deep 15 2021-08-30 Pirate's Cove 25 2026-04-03