SQL - Проверка ограничения: Ваш доброжелательный гид по целостности данных

Здравствуйте, будущие маги SQL! Сегодня мы окунемся в магический мир SQL-ограничений проверки. Не волнуйтесь, если вы новички в программировании – я буду вашим проводником в этом приключении, и мы будем идти шаг за шагом. Так что возьмите любимый напиток, устроитесь поудобнее, и начнем наше путешествие!

SQL - Check Constraint

Ограничение проверки SQL: Лучший друг ваших данных

Представьте, что вы организовываете вечеринку, и хотите убедиться, что только гости старше 18 лет могут присутствовать. Именно так ограничение проверки действует в вашей базе данных – оно играет роль контролера, обеспечивая, чтобы только правильные данные попали внутрь!

Ограничение проверки – это правило, которое мы устанавливаем на столбец (или столбцы) в таблице, чтобы убедиться, что данные соответствуют определенным условиям перед тем, как они будут разрешены. Это как дать вашей базе данных суперсилу для поддержания целостности данных!

Давайте рассмотрим несколько примеров, чтобы это стало clearer.

Ограничение проверки на одном столбце: Сольный номер

Когда мы применяем ограничение проверки к одному столбцу, мы говорим этому столбцу: "Эй, у тебя одна задача – убедиться, что данные следуют этому правилу!"

Вот пример:

CREATE TABLE Employees (
EmployeeID INT PRIMARY KEY,
FirstName VARCHAR(50),
LastName VARCHAR(50),
Age INT CHECK (Age >= 18)
);

В этом примере мы создаем таблицу Employees с ограничением проверки на столбце Age. Это ограничение ensures, что любой введенный возраст должен быть 18 или старше. Если кто-то попытается вставить сотрудника младше 18 лет, база данных вежливо откажет, как наш контролер на вечеринке!

Давайте试着 вставить данные:

-- Это сработает
INSERT INTO Employees (EmployeeID, FirstName, LastName, Age)
VALUES (1, 'John', 'Doe', 25);

-- Это не сработает
INSERT INTO Employees (EmployeeID, FirstName, LastName, Age)
VALUES (2, 'Jane', 'Smith', 17);

Первый оператор INSERT успешен, так как 25 больше или равно 18. Однако второй оператор не сработает, так как 17 не соответствует нашему ограничению проверки. Наш контролер данных делает свою работу!

Ограничение проверки на нескольких столбцах: Динамическая пара

Иногда нам нужно проверить условие, которое involves более чем один столбец. Вот где на помощь приходят многоколонные ограничения проверки!

Вот пример:

CREATE TABLE Orders (
OrderID INT PRIMARY KEY,
OrderDate DATE,
ShipDate DATE,
CHECK (ShipDate >= OrderDate)
);

В этой таблице Orders мы обеспечиваем, чтобы ShipDate всегда был или после OrderDate. В конце концов, мы не можем отправить заказ до его размещения, верно? Это потребовало бы путешествия во времени, а SQL еще не дошел до такого уровня...

Давайте проверим это:

-- Это сработает
INSERT INTO Orders (OrderID, OrderDate, ShipDate)
VALUES (1, '2023-06-01', '2023-06-03');

-- Это не сработает
INSERT INTO Orders (OrderID, OrderDate, ShipDate)
VALUES (2, '2023-06-01', '2023-05-31');

Первый оператор INSERT успешен, так как ShipDate (3 июня) после OrderDate (1 июня). Второй оператор не сработает, так как он пытается отправить заказ (31 мая) до его размещения (1 июня). Наш контролер времени улавливает эту временной аномалии!

Ограничение проверки на уровне таблицы: Всевидящее око

Иногда мы хотим создать ограничение проверки, которое involves несколько столбцов, но не связано с каким-либо конкретным столбцом. Мы можем сделать это, создав ограничение проверки на уровне таблицы.

Вот как это выглядит:

CREATE TABLE Products (
ProductID INT PRIMARY KEY,
ProductName VARCHAR(50),
UnitPrice DECIMAL(10,2),
DiscountedPrice DECIMAL(10,2),
CONSTRAINT CHK_Price CHECK (DiscountedPrice <= UnitPrice)
);

В этой таблице Products мы обеспечиваем, чтобы DiscountedPrice всегда был меньше или равен UnitPrice. В конце концов, мы не хотим случайно завысить цену на наши продукты после скидки!

Давайте увидим это в действии:

-- Это сработает
INSERT INTO Products (ProductID, ProductName, UnitPrice, DiscountedPrice)
VALUES (1, 'Super Gadget', 99.99, 79.99);

-- Это не сработает
INSERT INTO Products (ProductID, ProductName, UnitPrice, DiscountedPrice)
VALUES (2, 'Mega Widget', 49.99, 59.99);

Первый оператор INSERT успешен, так как DiscountedPrice (79.99) меньше UnitPrice (99.99). Второй оператор не сработает, так как он пытается установить DiscountedPrice (59.99), который выше UnitPrice (49.99). Наше ограничение проверки спасает нас от этой ошибки в ценообразовании!

Добавление ограничения проверки к существующему столбцу: Реконструкция

Что, если у нас уже есть таблица, и мы хотим добавить ограничение проверки? Нет проблем! Мы можем добавить ограничения к существующим столбцам.

Вот как:

-- Сначала создадим таблицу без ограничений
CREATE TABLE Students (
StudentID INT PRIMARY KEY,
FirstName VARCHAR(50),
LastName VARCHAR(50),
GPA DECIMAL(3,2)
);

-- Теперь добавим ограничение проверки
ALTER TABLE Students
ADD CONSTRAINT CHK_GPA CHECK (GPA >= 0.0 AND GPA <= 4.0);

В этом примере мы добавляем ограничение проверки, чтобы убедиться, что GPA всегда находится между 0.0 и 4.0.

Давайте проверим это:

-- Это сработает
INSERT INTO Students (StudentID, FirstName, LastName, GPA)
VALUES (1, 'Alice', 'Johnson', 3.75);

-- Это не сработает
INSERT INTO Students (StudentID, FirstName, LastName, GPA)
VALUES (2, 'Bob', 'Smith', 4.5);

Первый оператор INSERT успешен, так как 3.75 находится в允许анном диапазоне GPA. Второй оператор не сработает, так как 4.5 превышает наш максимальный показатель 4.0. Наше модифицированное ограничение проверки поддерживает GPAs в порядке!

Удаление ограничения проверки: Великий побег

Иногда нам может потребоваться удалить ограничение проверки. Может быть, наши бизнес-правила изменились, или мы перерабатываем нашу базу данных. Независимо от причины, SQL предоставляет нам способ удалить ограничения.

Вот как это сделать:

-- Чтобы удалитьnamed ограничение
ALTER TABLE Students
DROP CONSTRAINT CHK_GPA;

-- Чтобы удалить unnamed ограничение (синтаксис SQL Server)
ALTER TABLE Employees
DROP CONSTRAINT ALL;

И вот так ограничение disappears! Но помните, с большой силой приходит большая ответственность. Убедитесь, что вы действительно хотите удалить это ограничение, прежде чем делать это!

Заключение: Ваш toolkit целостности данных

И вот мы и добрались до этого, друзья! Мы совершили путешествие через страну SQL-ограничений проверки, от одиночных стражей до многоколонных часовых, от таблицных Overseers до eliminators ограничений.

Remember, ограничения проверки – это верные стражи вашего data kingdom. Они работают без устали, чтобы убедиться, что только правильные данные попадают в ваши таблицы, поддерживая чистоту,一致性 и надежность вашей базы данных.

While вы продолжаете свое SQL приключение, держите эти ограничения проверки в вашем toolkit. Они будут вашими верными спутниками в поддержании целостности данных и предотвращении pesky data gremlins от проникновения!

Теперь, идите смело и применяйте ограничения с уверенностью! Счастливого SQL-программирования!

Credits: Image by storyset