Ограничения в SQL - это правила, применяемые к данным в таблицах для обеспечения целостности и точности данных. Вот основные способы определения ограничений:
Обеспечивает уникальность каждой записи в таблице и запрещает 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)
);
Обеспечивает ссылочную целостность между таблицами.
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)
);
Гарантирует, что все значения в столбце различны.
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)
);
Определяет условие, которому должны удовлетворять данные.
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)
);
Запрещает NULL значения в столбце.
CREATE TABLE customers (
id INT PRIMARY KEY,
name VARCHAR(100) NOT NULL
);
Устанавливает значение по умолчанию для столбца.
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 для значений по умолчанию.