Как определить ограничения в SQL?sql-96

Ограничения в SQL - это правила, применяемые к данным в таблицах для обеспечения целостности и точности данных. Вот основные способы определения ограничений:

1. Первичный ключ

Обеспечивает уникальность каждой записи в таблице и запрещает NULL значения.

CREATE TABLE employees (
    id INT PRIMARY KEY,
    name VARCHAR(100)
);

Или с именованным ограничением:

CREATE TABLE employees (
    id INT,
    name VARCHAR(100),
    CONSTRAINT pk_employee PRIMARY KEY (id)
);

2. Внешний ключ

Обеспечивает ссылочную целостность между таблицами.

CREATE TABLE orders (
    order_id INT PRIMARY KEY,
    employee_id INT,
    FOREIGN KEY (employee_id) REFERENCES employees(id)
);

Или с именованным ограничением:

CREATE TABLE orders (
    order_id INT PRIMARY KEY,
    employee_id INT,
    CONSTRAINT fk_employee_order
    FOREIGN KEY (employee_id) REFERENCES employees(id)
);

3. Уникальное ограничение

Гарантирует, что все значения в столбце различны.

CREATE TABLE users (
    id INT PRIMARY KEY,
    email VARCHAR(255) UNIQUE
);

Или для нескольких столбцов:

CREATE TABLE users (
    id INT PRIMARY KEY,
    first_name VARCHAR(100),
    last_name VARCHAR(100),
    CONSTRAINT uniq_name UNIQUE (first_name, last_name)
);

4. Проверочное ограничение

Определяет условие, которому должны удовлетворять данные.

CREATE TABLE products (
    id INT PRIMARY KEY,
    price DECIMAL(10,2) CHECK (price > 0)
);

Или сложное условие:

CREATE TABLE employees (
    id INT PRIMARY KEY,
    age INT,
    salary DECIMAL(10,2),
    CONSTRAINT chk_employee
    CHECK (age >= 18 AND salary >= 0)
);

5. Ограничение NOT NULL

Запрещает NULL значения в столбце.

CREATE TABLE customers (
    id INT PRIMARY KEY,
    name VARCHAR(100) NOT NULL
);

6. Ограничение DEFAULT

Устанавливает значение по умолчанию для столбца.

CREATE TABLE orders (
    id INT PRIMARY KEY,
    order_date DATE DEFAULT CURRENT_DATE
);

Определение ограничений после создания таблицы

Ограничения можно добавлять к существующей таблице с помощью ALTER TABLE:

ALTER TABLE employees
ADD CONSTRAINT chk_age CHECK (age >= 18);

Просмотр существующих ограничений

В разных СУБД существуют системные представления для просмотра ограничений:

MySQL:

SELECT * FROM information_schema.table_constraints;

PostgreSQL:

SELECT * FROM pg_constraint;

SQL Server:

SELECT * FROM sys.key_constraints;

Oracle:

SELECT * FROM user_constraints;

Резюмируем: ограничения в SQL - это мощный механизм для обеспечения целостности данных. Они могут быть определены при создании таблицы или добавлены позже. Каждый тип ограничения служит своей цели: PRIMARY KEY для уникальной идентификации, FOREIGN KEY для связей между таблицами, UNIQUE для уникальности значений, CHECK для валидации данных, NOT NULL для обязательных полей и DEFAULT для значений по умолчанию.