Ответ
Ограничения в SQL — это правила, применяемые к данным в столбцах таблицы для обеспечения целостности данных (data integrity) и их точности. Вот основные типы с примерами:
-
PRIMARY KEY(Первичный ключ):- Назначение: Уникально идентифицирует каждую строку в таблице. Не допускает
NULLи дубликатов. - Пример:
CREATE TABLE Users ( Id INT PRIMARY KEY, -- Столбец Id — первичный ключ Username VARCHAR(50) NOT NULL );
- Назначение: Уникально идентифицирует каждую строку в таблице. Не допускает
-
FOREIGN KEY(Внешний ключ):- Назначение: Обеспечивает ссылочную целостность. Связывает столбец/столбцы одной таблицы с первичным ключом другой, предотвращая действия, которые нарушили бы эту связь.
- Пример:
CREATE TABLE Orders ( OrderId INT PRIMARY KEY, UserId INT, -- Этот столбец ссылается на Users.Id FOREIGN KEY (UserId) REFERENCES Users(Id) ON DELETE CASCADE );
-
UNIQUE(Уникальность):- Назначение: Гарантирует, что все значения в столбце (или комбинации столбцов) различны. В отличие от
PRIMARY KEY, допускает одинNULL(зависит от СУБД). - Пример:
CREATE TABLE Products ( Id INT PRIMARY KEY, SKU VARCHAR(20) UNIQUE, -- Код товара должен быть уникальным Name VARCHAR(100) );
- Назначение: Гарантирует, что все значения в столбце (или комбинации столбцов) различны. В отличие от
-
CHECK(Проверка):- Назначение: Проверяет, что значения в столбце удовлетворяют заданному логическому условию.
- Пример:
CREATE TABLE Employees ( Id INT PRIMARY KEY, Name VARCHAR(100), Age INT CHECK (Age >= 18 AND Age <= 70), -- Возраст в допустимом диапазоне Department VARCHAR(50) CHECK (Department IN ('IT', 'Sales', 'HR')) );
-
NOT NULL(Запрет NULL):- Назначение: Запрещает столбцу содержать
NULL-значения. Это базовое ограничение для обязательных полей. - Пример:
CREATE TABLE Customers ( Id INT PRIMARY KEY, Email VARCHAR(100) NOT NULL, -- Email обязателен для заполнения Phone VARCHAR(20) -- Phone может быть NULL );
- Назначение: Запрещает столбцу содержать
-
DEFAULT(Значение по умолчанию):- Назначение: Устанавливает значение по умолчанию для столбца, если при вставке новое значение не указано.
- Пример:
CREATE TABLE Tasks ( Id INT PRIMARY KEY, Description TEXT, Status VARCHAR(20) DEFAULT 'Pending', -- По умолчанию задача в статусе 'Pending' CreatedAt DATETIME DEFAULT CURRENT_TIMESTAMP -- Автоматическая дата создания );
Почему это важно: Ограничения переносят логику контроля данных на уровень БД, что защищает от ошибок в приложении и гарантирует согласованность данных даже при прямом доступе к базе.