Создание таблицы
До сих пор вы работали с уже готовыми таблицами. В этом уроке вы создадите собственные, а заодно увидите, как были сделаны таблицы Pixel Shop. Новая таблица создаётся инструкцией CREATE TABLE, после которой идут название таблицы и, в скобках, её столбцы:
CREATE TABLE platforms (
name TEXT,
maker TEXT,
year INTEGER
) STRICT;У каждого столбца есть имя и тип, который говорит, какие значения в нём хранятся: TEXT — для текста, INTEGER — для целых чисел. С остальными типами вы познакомитесь в следующем упражнении. Столбцы разделяются запятыми, а после закрывающей скобки идут слово STRICT и точка с запятой. Записывать каждый столбец на отдельной строке необязательно, но так таблицу легче читать.
Названия таблиц и столбцов обычно пишут строчными буквами, а слова разделяют подчёркиванием, например order_items или age_rating. Таблице обычно дают название во множественном числе, ведь в ней много строк: games, customers.
CREATE TABLE ничего не ищет, поэтому результата не показывает, а новая таблица пуста. Заполняется она с помощью INSERT, который вы знаете из прошлого урока, а посмотреть её можно с помощью SELECT:
INSERT INTO platforms (name, maker, year)
VALUES ('PlayStation 5', 'Sony', 2020),
('Switch', 'Nintendo', 2017),
('Xbox Series X', 'Microsoft', 2020);
SELECT * FROM platforms;| name | maker | year |
|---|---|---|
| PlayStation 5 | Sony | 2020 |
| Switch | Nintendo | 2017 |
| Xbox Series X | Microsoft | 2020 |
Это упражнение начинается с пустой базы данных, поэтому на вкладке «Таблицы» ничего нет. Вашу таблицу она бы всё равно не показала: на ней видны только те таблицы, с которыми упражнение начинается. Чтобы увидеть, что в вашей таблице, сделайте запрос к ней. А поскольку каждый запуск начинается со свежей базы данных, ваш файл каждый раз создаёт таблицу заново. В настоящей базе данных таблица создаётся один раз и потом остаётся; повторный запуск того же CREATE TABLE закончился бы ошибкой table platforms already exists.
Зачем нужно STRICT? Без него SQLite пропускает любое значение в любой столбец, даже текст в столбец с целыми числами. Здесь SQLite необычен: другие базы данных, например PostgreSQL или MySQL, всегда проверяют типы. STRICT заставляет SQLite проверять их тоже, и значение неподходящего типа отклоняется:
INSERT INTO platforms (name, maker, year)
VALUES ('Steam Deck', 'Valve', 'in 2022');Error on line 1: cannot store TEXT value in INTEGER column platforms.yearВсе таблицы Pixel Shop — STRICT, такими же будут и все таблицы, которые вы создадите в этом курсе. Ошибку в данных легко исправить, когда база данных останавливает её сразу, и гораздо труднее, когда кто-то находит её спустя месяцы.
Типичная ошибка: запятая после последнего столбца. Запятые ставятся только между столбцами, поэтому такой запрос завершится ошибкой:
CREATE TABLE platforms (
name TEXT,
maker TEXT,
year INTEGER,
) STRICT;Error on line 1: near ")": syntax errorЗадание
- 1
Магазин хочет вести список своих сотрудников. Создайте таблицу
employeesс тремя столбцами:nameиjob, оба текстовые, иsalary— целое число. Не забудьтеSTRICT. При запуске во вкладке «Результаты» пока ничего не появится: в файле нет запроса. - 2
Ниже вставьте этих трёх сотрудников (name, job, salary):
'Lucy Moore', 'manager', 4100'Ben Carter', 'support', 2800'Zoe Price', 'marketing', 3200
Затем покажите всю таблицу, отсортированную по зарплате от самой высокой:
name job salary Lucy Moore manager 4100 Zoe Price marketing 3200 Ben Carter support 2800