gadget59.ru лекции
Базы данных · Лекция 2 · 28 слайдов

Изменение данных и структура таблиц: INSERT, UPDATE, DELETE, CREATE TABLE, PRIMARY KEY и FOREIGN KEY в MS SQL Server

Изменение данных и структура таблиц

На прошлой лекции мы научились создавать базу данных, таблицу и выбирать из неё данные через SELECT. Но это только половина работы. Настоящее приложение должно добавлять новые записи, изменять существующие и удалять устаревшие.

➕ INSERT ✏️ UPDATE 🗑️ DELETE 🏗️ CREATE TABLE 🔑 PRIMARY KEY 🔗 FOREIGN KEY
Сегодня мы разберём: как добавлять данные, как менять их, как удалять безопасно, из чего состоит таблица, какие типы данных бывают в MS SQL Server и что такое первичный и внешний ключи.
Формат: лекция + практика в конце. Следующая лекция — связи таблиц через 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 Практика и домашнее задание
Если вы не уверены в основах — вернитесь к Лекции 1. Без неё эта тема будет непонятна.

Напоминание: DML и DDL

SQL-команды делятся на группы. Сегодня мы работаем с двумя из них.

ГруппаРасшифровкаЧто делаетКоманды DMLData Manipulation Language, язык манипулирования даннымиработает с даннымиINSERT, UPDATE, DELETE, SELECT DDLData Definition Language, язык определения данныхработает со структуройCREATE TABLE, ALTER, DROP
DML — это команды, которые меняют содержимое таблицы: добавляют строки, изменяют их, удаляют.
DDL — это команды, которые меняют структуру таблицы: создают, удаляют, изменяют столбцы.
Запомнить просто: DML — про данные, DDL — про конструкцию. Как строитель: DDL кладёт кирпичи (стены), DML расставляет мебель (содержимое).

INSERT INTO — добавление данных

INSERT INTO — команда, которая добавляет новую строку в таблицу. По-русски: «вставить в».

Синтаксис

INSERT INTO имя_таблицы (столбец1, столбец2, ...) VALUES (значение1, значение2, ...);

Пример

INSERT INTO Students (Id, Name, Age) VALUES (1, N'Иван', 25);
Каждое значение из VALUES попадает в столбец из списка — строго по порядку. Если столбцов три, значений тоже должно быть три.

INSERT INTO — несколько строк сразу

Можно вставить несколько строк одной командой. Это удобно и быстрее, чем вызывать INSERT несколько раз.

INSERT INTO Students (Id, Name, Age) VALUES (2, N'Мария', 30), (3, N'Пётр', 22), (4, N'Ольга', 27);
  • Каждая строка в скобках — отдельная запись.
  • Между строками — запятая.
  • В конце — точка с запятой.
Если всё сделано правильно — SSMS покажет сообщение «(3 rows affected)». Три строки добавлены.

INSERT INTO — когда не все столбцы

Иногда не нужно заполнять все столбцы. Например, если у нас есть поле «комментарий», и мы пока его не знаем.

-- Заполняем только часть столбцов INSERT INTO Students (Id, Name) VALUES (5, N'Сергей');
  • Возраст (Age) останется пустым — точнее, там будет NULL (пустое значение).
  • Так можно делать только если столбец не объявлен как NOT NULL (обязательный).
Если столбец NOT NULL и вы его пропустили — будет ошибка: «Cannot insert the value NULL into column». Это значит: «не могу вставить пустое значение в обязательное поле».

UPDATE — изменение данных

UPDATE — команда, которая изменяет значения в существующих строках. По-русски: «обновить».

Синтаксис

UPDATE имя_таблицы SET столбец1 = новое_значение1, столбец2 = новое_значение2 WHERE условие;

Пример

-- Ивану теперь 26 лет UPDATE Students SET Age = 26 WHERE Name = N'Иван';
SET — что менять.
WHERE — кого именно.

UPDATE — несколько столбцов сразу

Можно менять несколько столбцов одной командой. Между ними — запятая.

-- Меняем и возраст, и имя UPDATE Students SET Age = 31, Name = N'Мария Ивановна' WHERE Id = 2;
В WHERE лучше указывать Id, а не Name. Почему — объясним на следующем слайде.

UPDATE без WHERE — катастрофа

Если забыть WHERE в UPDATE, изменится каждая строка таблицы.

-- ОПАСНО! Изменит ВСЕ строки UPDATE Students SET Age = 0;
Этот запрос сделает возраст ноль у всех студентов. Даже если их миллион. Отменить это можно только если вы сделали резервную копию.
Правило: никогда не выполняйте UPDATE без WHERE, если вы точно не хотите обновить всю таблицу. В 99% случаев это ошибка.

DELETE — удаление данных

DELETE — команда, которая удаляет строки из таблицы. По-русски: «удалить».

Синтаксис

DELETE FROM имя_таблицы WHERE условие;

Пример

-- Удаляем студента с Id = 3 DELETE FROM Students WHERE Id = 3;
После выполнения этой команды строка с Петром (Id = 3) исчезнет из таблицы навсегда.

DELETE без WHERE — катастрофа

Если забыть WHERE в DELETE, удалятся все строки таблицы. Таблица станет пустой.

-- ОПАСНО! Удалит ВСЕ строки DELETE FROM Students;
Этот запрос опустошит всю таблицу. Данные пропадут. Если не сделана резервная копия — их уже не вернуть.
Чтобы уменьшить риск, разработчики часто перед выполнением UPDATE или DELETE делают SELECT с тем же WHERE — проверяют, какие строки попадут под изменение.

Правило трёх шагов

Опытные разработчики всегда работают с UPDATE и DELETE в три шага.

1. Сначала SELECT с тем же WHERE
↓
2. Убедиться, что выбраны нужные строки
↓
3. Заменить SELECT на UPDATE или DELETE
-- Шаг 1. Проверяем, какие строки попадут SELECT * FROM Students WHERE Id = 3; -- Шаг 2. Убедились, что это Пётр -- Шаг 3. Удаляем DELETE FROM Students WHERE Id = 3;
Такой подход спасает от опечаток и случайных удалений.

CREATE TABLE — создание таблицы

Мы уже создавали таблицу на прошлой лекции. Теперь разберём её подробно.

CREATE TABLE Students ( Id INT PRIMARY KEY IDENTITY(1,1), Name NVARCHAR(100) NOT NULL, Age INT, City NVARCHAR(50) );
ЧастьЧто значитПояснение Id INTцелое числоуникальный номер строки PRIMARY KEYпервичный ключзначение не повторяется, не NULL IDENTITY(1,1)автонумерацияначнётся с 1, шаг — 1 NVARCHAR(100)строка Unicode до 100 символовФИО, название INTцелое числовозраст, год, количество NOT NULLобязательное полене может быть пустым

Типы данных в MS SQL Server

При создании таблицы для каждого столбца указывается тип. Вот самые важные.

ТипЧто хранитПример INTцелое число42, -7, 1000 BIGINTочень большое целое8 000 000 000 DECIMAL(10,2)дробное с точностью1234.56 NVARCHAR(n)строка Unicode до n символов'Иван', 'Java' NVARCHAR(MAX)длинная строкатекст статьи DATEдата2026-10-24 DATETIMEдата и время2026-10-24 15:30 BITлогическое значение0 или 1
NVARCHAR — это строка, которая поддерживает любые языки, включая русский. VARCHAR — только латиницу. Всегда используйте N, если работаете с кириллицей.

PRIMARY KEY — первичный ключ

PRIMARY KEY (первичный ключ) — это столбец (или набор столбцов), который уникально идентифицирует каждую строку в таблице.

✅
Уникальность
Двух строк с одинаковым Id быть не может.
🚫
Не NULL
Значение обязательно. Пустым быть не может.
CREATE TABLE Students ( Id INT PRIMARY KEY, Name NVARCHAR(100) NOT NULL );
Первичный ключ — это «паспорт» строки. По нему всегда можно точно найти нужную запись, даже если все остальные значения совпадают.

IDENTITY — автонумерация

IDENTITY — это свойство, которое автоматически присваивает строкам следующий номер. Не нужно вручную указывать Id.

CREATE TABLE Students ( Id INT PRIMARY KEY IDENTITY(1,1), Name NVARCHAR(100) NOT NULL ); -- При вставке Id не указываем — SQL сам поставит 1, 2, 3... INSERT INTO Students (Name) VALUES (N'Иван'); INSERT INTO Students (Name) VALUES (N'Мария');
  • IDENTITY(1,1) — начать с 1, шаг 1.
  • Первая строка получит Id = 1, вторая — Id = 2, и так далее.
  • Если удалить строку — номер не переиспользуется.
IDENTITY — это как автоматический счётчик. Удобно, когда не хочется вручную следить за уникальностью Id.

FOREIGN KEY — внешний ключ

Представьте две таблицы: «Группы» и «Студенты». У каждого студента есть группа. Как связать их?

CREATE TABLE Groups ( Id INT PRIMARY KEY IDENTITY(1,1), Name NVARCHAR(50) NOT NULL ); CREATE TABLE Students ( Id INT PRIMARY KEY IDENTITY(1,1), Name NVARCHAR(100) NOT NULL, GroupId INT, FOREIGN KEY (GroupId) REFERENCES Groups(Id) );
  • FOREIGN KEY (внешний ключ) — столбец, который ссылается на PRIMARY KEY другой таблицы.
  • REFERENCES — указывает, на какую таблицу и столбец ссылаемся.
  • Теперь в Students.GroupId можно записать только существующий Groups.Id.
Внешний ключ — это «ссылка». Он не даёт вставить студента в несуществующую группу и не даёт удалить группу, если в ней есть студенты.

Схема связей

Вот как выглядят две таблицы со связью.

Groups (Id, Name)
↑ FOREIGN KEY
Students (Id, Name, GroupId)
IdNameGroupId 1Иван1 2Мария2 3Пётр1

Здесь GroupId = 1 означает, что студент в группе с Id = 1.

Внешние ключи — это основа реляционных баз данных. Именно через них таблицы связываются друг с другом, и мы можем делать запросы вроде «покажи всех студентов такой-то группы».

Что даёт внешний ключ

Внешний ключ защищает от трёх типов ошибок.

🚫
Нельзя вставить
студента в несуществующую группу
🚫
Нельзя удалить
группу, в которой есть студенты
🚫
Нельзя изменить
Id группы, если на неё есть ссылки
-- Это вызовет ошибку, если в Groups нет Id = 99 INSERT INTO Students (Name, GroupId) VALUES (N'Сергей', 99); -- Это вызовет ошибку, если в группе 1 есть студенты DELETE FROM Groups WHERE Id = 1;
База данных сама следит за целостностью данных. Это называется «ссылочная целостность».

ALTER TABLE — изменение структуры

Иногда таблицу уже создали, а потом нужно добавить столбец или изменить тип. Для этого есть ALTER TABLE.

-- Добавить столбец Email ALTER TABLE Students ADD Email NVARCHAR(100); -- Удалить столбец ALTER TABLE Students DROP COLUMN Email;
  • ALTER TABLE ADD — добавить столбец.
  • ALTER TABLE DROP COLUMN — удалить столбец.
  • Осторожно: при удалении столбца все данные в нём пропадут.
В реальной работе структуру таблицы стараются менять редко. Если приходится — предупредите коллег и сделайте резервную копию.

DROP TABLE — удаление таблицы

DROP TABLE полностью удаляет таблицу — и структуру, и все данные.

DROP TABLE Students;
После выполнения этой команды таблицы не существует. Восстановить её можно только из резервной копии. Никогда не выполняйте DROP TABLE «на всякий случай».
Разница: DELETE FROM Students удаляет данные, но таблица остаётся. DROP TABLE Students удаляет таблицу целиком.

Сводная таблица команд

Все команды, которые мы изучили за две лекции.

КомандаЧто делаетОпасность SELECTвыборка данныхнет INSERTдобавление строкнизкая UPDATEизменение строквысокая без WHERE DELETEудаление строквысокая без WHERE CREATE TABLEсоздание таблицысредняя ALTER TABLEизменение структурывысокая DROP TABLEудаление таблицыкритическая
Чем «опаснее» команда, тем внимательнее нужно быть. Особенно с UPDATE, DELETE, ALTER и DROP.

Типичные ошибки новичков

1. UPDATE без WHERE
Изменяет все строки. Всегда проверяйте условие.
2. DELETE без WHERE
Удаляет всю таблицу. Всегда проверяйте условие.
3. Забыл N перед русской строкой
VALUES ('Иван') — кракозябры. Нужно VALUES (N'Иван').
4. Вставил значение в NOT NULL как NULL
Ошибка: «Cannot insert the value NULL». Заполняйте обязательные поля.
5. Ошибка внешнего ключа
Пытаетесь вставить GroupId = 99, а группы 99 нет. Сначала создайте группу.
6. Ошибка при удалении с внешним ключом
Удаляете группу, в которой есть студенты. Сначала удалите или перенесите студентов.

Практика: 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.

Решения разберём на практическом занятии. Попробуйте сначала сами — это важнее готового ответа.

Шпаргалка

Сохраните этот слайд — здесь все команды, которые мы изучили.

ЗадачаSQL-запрос добавить строкуINSERT INTO Students (Name) VALUES (N'Иван'); добавить несколькоINSERT INTO Students (Name) VALUES (N'А'), (N'Б'); изменить строкуUPDATE Students SET Age = 26 WHERE Id = 1; изменить несколько столбцовUPDATE Students SET Age = 26, City = N'Москва' WHERE Id = 1; удалить строкуDELETE FROM Students WHERE Id = 1; создать таблицуCREATE TABLE Students (Id INT PRIMARY KEY, Name NVARCHAR(100)); с автонумерациейId INT PRIMARY KEY IDENTITY(1,1) внешний ключFOREIGN KEY (GroupId) REFERENCES Groups(Id) добавить столбецALTER TABLE Students ADD Email NVARCHAR(100); удалить таблицуDROP TABLE Students;
Если помните эти команды — вы умеете работать с данными в MS SQL Server.

Итоги лекции

Подведём итоги. Вот что вы теперь знаете.

  • ✅ 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.

Домашнее задание

Задания для самостоятельной работы. Первые три обязательны, остальные — для оценки «отлично».

  1. Создайте базу данных LibraryDB.
  2. Создайте таблицу Authors с полями Id INT PRIMARY KEY IDENTITY, Name NVARCHAR(100) NOT NULL.
  3. Создайте таблицу Books с полями Id, Title, AuthorId и внешним ключом на Authors.
  4. Добавьте двух авторов через INSERT.
  5. Добавьте три книги, привязанные к этим авторам.
  6. Напишите запрос: «изменить название первой книги» через UPDATE.
  7. Напишите запрос: «удалить одного автора, у которого нет книг» через DELETE.
Если задание кажется сложным — разбейте его на части. Сначала таблица, потом данные, потом изменения.

Спасибо за внимание!

✏️

Теперь вы умеете изменять данные и структуру

На следующей лекции — связи таблиц через JOIN, группировка и агрегатные функции. Это то, что делает SQL по-настоящему мощным.

➕ INSERT ✏️ UPDATE 🗑️ DELETE 🔑 PRIMARY KEY 🔗 FOREIGN KEY