Изменение данных и структура таблиц
На прошлой лекции мы научились создавать базу данных, таблицу и выбирать из неё данные через SELECT. Но это только половина работы. Настоящее приложение должно добавлять новые записи, изменять существующие и удалять устаревшие.
JOIN и агрегатные функции.План лекции
Сегодня мы пойдём от простого к сложному. Сначала — изменение данных. Потом — структура таблиц и ключи.
- 1 Напоминание: что такое DML и DDL
- 2 INSERT INTO — добавление данных
- 3 UPDATE — изменение данных
- 4 DELETE — удаление данных
- 5 Почему WHERE в UPDATE и DELETE критичен
- 6 CREATE TABLE — создание таблиц
- 7 Типы данных в MS SQL Server
- 8 PRIMARY KEY — первичный ключ
- 9 IDENTITY — автонумерация
- 10 FOREIGN KEY — внешний ключ
- 11 Типичные ошибки
- 12 Практика и домашнее задание
Напоминание: DML и DDL
SQL-команды делятся на группы. Сегодня мы работаем с двумя из них.
DDL — это команды, которые меняют структуру таблицы: создают, удаляют, изменяют столбцы.
INSERT INTO — добавление данных
INSERT INTO — команда, которая добавляет новую строку в таблицу. По-русски: «вставить в».
Синтаксис
Пример
VALUES попадает в столбец из списка — строго по порядку. Если столбцов три, значений тоже должно быть три.INSERT INTO — несколько строк сразу
Можно вставить несколько строк одной командой. Это удобно и быстрее, чем вызывать INSERT несколько раз.
- Каждая строка в скобках — отдельная запись.
- Между строками — запятая.
- В конце — точка с запятой.
INSERT INTO — когда не все столбцы
Иногда не нужно заполнять все столбцы. Например, если у нас есть поле «комментарий», и мы пока его не знаем.
- Возраст (Age) останется пустым — точнее, там будет
NULL(пустое значение). - Так можно делать только если столбец не объявлен как
NOT NULL(обязательный).
NOT NULL и вы его пропустили — будет ошибка: «Cannot insert the value NULL into column». Это значит: «не могу вставить пустое значение в обязательное поле».UPDATE — изменение данных
UPDATE — команда, которая изменяет значения в существующих строках. По-русски: «обновить».
Синтаксис
Пример
WHERE — кого именно.
UPDATE — несколько столбцов сразу
Можно менять несколько столбцов одной командой. Между ними — запятая.
WHERE лучше указывать Id, а не Name. Почему — объясним на следующем слайде.UPDATE без WHERE — катастрофа
Если забыть WHERE в UPDATE, изменится каждая строка таблицы.
UPDATE без WHERE, если вы точно не хотите обновить всю таблицу. В 99% случаев это ошибка.DELETE — удаление данных
DELETE — команда, которая удаляет строки из таблицы. По-русски: «удалить».
Синтаксис
Пример
DELETE без WHERE — катастрофа
Если забыть WHERE в DELETE, удалятся все строки таблицы. Таблица станет пустой.
UPDATE или DELETE делают SELECT с тем же WHERE — проверяют, какие строки попадут под изменение.Правило трёх шагов
Опытные разработчики всегда работают с UPDATE и DELETE в три шага.
CREATE TABLE — создание таблицы
Мы уже создавали таблицу на прошлой лекции. Теперь разберём её подробно.
Типы данных в MS SQL Server
При создании таблицы для каждого столбца указывается тип. Вот самые важные.
N, если работаете с кириллицей.PRIMARY KEY — первичный ключ
PRIMARY KEY (первичный ключ) — это столбец (или набор столбцов), который уникально идентифицирует каждую строку в таблице.
Двух строк с одинаковым Id быть не может.
Значение обязательно. Пустым быть не может.
IDENTITY — автонумерация
IDENTITY — это свойство, которое автоматически присваивает строкам следующий номер. Не нужно вручную указывать Id.
IDENTITY(1,1)— начать с 1, шаг 1.- Первая строка получит Id = 1, вторая — Id = 2, и так далее.
- Если удалить строку — номер не переиспользуется.
FOREIGN KEY — внешний ключ
Представьте две таблицы: «Группы» и «Студенты». У каждого студента есть группа. Как связать их?
- FOREIGN KEY (внешний ключ) — столбец, который ссылается на
PRIMARY KEYдругой таблицы. - REFERENCES — указывает, на какую таблицу и столбец ссылаемся.
- Теперь в
Students.GroupIdможно записать только существующийGroups.Id.
Схема связей
Вот как выглядят две таблицы со связью.
Здесь GroupId = 1 означает, что студент в группе с Id = 1.
Что даёт внешний ключ
Внешний ключ защищает от трёх типов ошибок.
студента в несуществующую группу
группу, в которой есть студенты
Id группы, если на неё есть ссылки
ALTER TABLE — изменение структуры
Иногда таблицу уже создали, а потом нужно добавить столбец или изменить тип. Для этого есть ALTER TABLE.
ALTER TABLE ADD— добавить столбец.ALTER TABLE DROP COLUMN— удалить столбец.- Осторожно: при удалении столбца все данные в нём пропадут.
DROP TABLE — удаление таблицы
DROP TABLE полностью удаляет таблицу — и структуру, и все данные.
DROP TABLE «на всякий случай».DELETE FROM Students удаляет данные, но таблица остаётся. DROP TABLE Students удаляет таблицу целиком.Сводная таблица команд
Все команды, которые мы изучили за две лекции.
UPDATE, DELETE, ALTER и DROP.Типичные ошибки новичков
Изменяет все строки. Всегда проверяйте условие.
Удаляет всю таблицу. Всегда проверяйте условие.
VALUES ('Иван') — кракозябры. Нужно VALUES (N'Иван').Ошибка: «Cannot insert the value NULL». Заполняйте обязательные поля.
Пытаетесь вставить
GroupId = 99, а группы 99 нет. Сначала создайте группу.Удаляете группу, в которой есть студенты. Сначала удалите или перенесите студентов.
Практика: 5 задач
Попробуйте выполнить эти команды в SSMS. Если не получилось — смотрите подсказки на предыдущих слайдах.
Задача 1
Создайте таблицу Teachers с полями: Id INT PRIMARY KEY IDENTITY, Name NVARCHAR(100) NOT NULL, Subject NVARCHAR(50).
Задача 2
Добавьте трёх учителей через INSERT INTO.
Задача 3
Измените предмет одного из учителей через UPDATE.
Задача 4
Удалите одного учителя через DELETE. Перед этим сделайте SELECT с тем же условием — проверьте.
Задача 5
Создайте таблицу Classes с полями Id INT PRIMARY KEY IDENTITY, Name NVARCHAR(20), и таблицу StudentsWithClass с внешним ключом на Classes.
Шпаргалка
Сохраните этот слайд — здесь все команды, которые мы изучили.
Итоги лекции
Подведём итоги. Вот что вы теперь знаете.
- ✅ DML — язык манипулирования данными:
INSERT,UPDATE,DELETE. - ✅ DDL — язык определения данных:
CREATE TABLE,ALTER,DROP. - ✅ INSERT INTO — добавление строк в таблицу.
- ✅ UPDATE — изменение строк. Без
WHEREменяет всё. - ✅ DELETE — удаление строк. Без
WHEREудаляет всё. - ✅ CREATE TABLE — создание таблицы с указанием типов.
- ✅ PRIMARY KEY — уникальный идентификатор строки.
- ✅ IDENTITY — автонумерация.
- ✅ FOREIGN KEY — ссылка на другую таблицу.
- ✅ ALTER TABLE, DROP TABLE — изменение и удаление структуры.
JOIN, агрегатные функции (COUNT, SUM, AVG), GROUP BY и HAVING.Домашнее задание
Задания для самостоятельной работы. Первые три обязательны, остальные — для оценки «отлично».
- Создайте базу данных
LibraryDB. - Создайте таблицу
Authorsс полямиId INT PRIMARY KEY IDENTITY,Name NVARCHAR(100) NOT NULL. - Создайте таблицу
Booksс полямиId,Title,AuthorIdи внешним ключом наAuthors. - Добавьте двух авторов через
INSERT. - Добавьте три книги, привязанные к этим авторам.
- Напишите запрос: «изменить название первой книги» через
UPDATE. - Напишите запрос: «удалить одного автора, у которого нет книг» через
DELETE.
Спасибо за внимание!
✏️
Теперь вы умеете изменять данные и структуру
На следующей лекции — связи таблиц через JOIN, группировка и агрегатные функции. Это то, что делает SQL по-настоящему мощным.