Изучение различных методов реализации ограничений SQL CHECK в существующих таблицах

Ограничения SQL CHECK необходимы для обеспечения целостности данных в базе данных. Они позволяют определять правила и условия, которые должны соблюдаться при вставке или обновлении записей в таблице. В этой статье блога мы рассмотрим несколько методов добавления ограничений CHECK к существующим таблицам, сопровождая их примерами кода.

Метод 1: использование оператора ALTER TABLE
Инструкция ALTER TABLE позволяет изменить структуру существующей таблицы. Чтобы добавить ограничение CHECK с помощью этого метода, следуйте приведенному ниже синтаксису:

ALTER TABLE table_name
ADD CONSTRAINT constraint_name CHECK (condition);

Пример.
Предположим, у нас есть таблица «Клиенты» со столбцом «Возраст». Мы хотим добавить ограничение CHECK, чтобы гарантировать, что возраст больше или равен 18.

ALTER TABLE Customers
ADD CONSTRAINT CHK_Age CHECK (Age >= 18);

Метод 2: использование оператора CREATE TABLE с временной таблицей.
Этот метод включает в себя создание временной таблицы с желаемым ограничением CHECK, копирование данных из исходной таблицы во временную таблицу, удаление исходной таблицы и, наконец, переименование. временная таблица.

Пример:

-- Step 1: Create a temporary table with the CHECK constraint
CREATE TABLE Customers_temp (
    CustomerID INT,
    Age INT CHECK (Age >= 18),
    -- other columns
);
-- Step 2: Copy data from the original table to the temporary table
INSERT INTO Customers_temp SELECT * FROM Customers;
-- Step 3: Drop the original table
DROP TABLE Customers;
-- Step 4: Rename the temporary table to the original table name
ALTER TABLE Customers_temp RENAME TO Customers;

Метод 3: использование триггера
Триггеры — это объекты базы данных, которые автоматически выполняют определенные действия при возникновении определенных событий. Мы можем создать триггер для применения ограничения CHECK при каждой вставке или обновлении записи.

Пример:

-- Step 1: Create a trigger that checks the condition
CREATE OR REPLACE TRIGGER trg_CheckAge
BEFORE INSERT OR UPDATE ON Customers
FOR EACH ROW
BEGIN
    IF :NEW.Age < 18 THEN
        RAISE_APPLICATION_ERROR(-20001, 'Age must be greater than or equal to 18.');
    END IF;
END;
/
-- Step 2: Insert or update records
INSERT INTO Customers (CustomerID, Age) VALUES (1, 20); -- Valid age
INSERT INTO Customers (CustomerID, Age) VALUES (2, 16); -- Invalid age