Ограничения в SQL
В этой статье вы поближе познакомитесь с ограничениями в SQL.
Ограничение (constraints) — это ограничение типа значений, которое накладывается на один или несколько столбцов таблицы. Это позволяет поддерживать точность и целостность данных в таблице БД.
В SQL существует несколько различных типов ограничений, в том числе:
NOT NULL
PRIMARY KEY
UNIQUE
DEFAULT
FOREIGN KEY
CHECK
Давайте обсудим каждое из этих ограничений попродробнее.
Ограничение NOT NULL
Ограничение NOT NULL
указывает, что столбец не может принимать значения NULL
.
Если к столбцу применено ограничение NOT NULL
, вы не сможете вставить новую строку в таблицу без добавления не-NULL-значения в этот столбец.
Пример
Следующая SQL-инструкция создает таблицу persons
с четырьмя столбцами, из которых три столбца — id
, name
и phone
— не могут иметь значение NULL
.
CREATE TABLE persons ( id INT NOT NULL, name VARCHAR(30) NOT NULL, birth_date DATE, phone VARCHAR(15) NOT NULL );
Примечание. Нулевое значение (
NULL
) — это не ноль(0) и не строка символов нулевой длины ('').NULL
означает, что записи нет.
Ограниение PRIMARY KEY
Ограничение PRIMARY KEY
определяет столбец или набор столбцов, значения которых однозначно идентифицируют строку в таблице. То есть никакие две строки в таблице не могут иметь одинаковое значение первичного ключа. Также нельзя вводить значение NULL
в столбец первичного ключа.
Пример
Следующая SQL-инструкция создает таблицу persons
и указывает столбец id
в качестве первичного ключа. Это означает, что в этом поле не допускаются значения NULL
или дубликаты.
CREATE TABLE persons ( id INT NOT NULL PRIMARY KEY, name VARCHAR(30) NOT NULL, birth_date DATE, phone VARCHAR(15) NOT NULL );
Примечание. Первичный ключ обычно состоит из одного столбца в таблице, однако несколько столбцов могут составлять первичный ключ. Например, адрес электронной почты сотрудника или присвоенный ID является логическим первичным ключом для таблицы сотрудников.
Ограничение UNIQUE
Ограничение UNIQUE означает, что в указанных столбцах обязательно должны быть уникальные значения.
Хотя и ограничение UNIQUE, и ограничение PRIMARY KEY обеспечивают уникальность значений, есть различия.
UNIQUE лучше PRIMARY KEY, когда вы хотите обеспечить уникальность столбца или комбинации столбцов, которые не являются первичным ключом.
Пример
Следующая SQL-инструкция создает таблицу persons
и определяет столбец phone
как уникальный. Это означает, что это поле не допускает дублирования значений.
CREATE TABLE persons ( id INT NOT NULL PRIMARY KEY, name VARCHAR(30) NOT NULL, birth_date DATE, phone VARCHAR(15) NOT NULL UNIQUE );
Примечание. В одной таблице может быть задано ограничений
UNIQUE
, но только одно ограничениеPRIMARY KEY
. Кроме того, в отличие от ограниченийPRIMARY KEY
, ограниченияUNIQUE
допускают значенияNULL
.
Ограничение DEFAULT
Ограничение DEFAULT
определяет значение по умолчанию для столбцов.
Значение столбца по умолчанию — это некоторое значение, которое будет вставлено в столбец базой данных, если оператор INSERT
явно не назначит конкретное значение.
Пример
В следующей SQL-инструкции мы задаем значение по умолчанию для столбца country
.
CREATE TABLE persons ( id INT NOT NULL PRIMARY KEY, name VARCHAR(30) NOT NULL, birth_date DATE, phone VARCHAR(15) NOT NULL UNIQUE, country VARCHAR(30) NOT NULL DEFAULT 'Россия' );
Примечание. Если вы определили столбец таблицы как
NOT NULL
, но присвоили ему значение по умолчанию, то в оператореINSERT
вам не нужно явно присваивать значение этому столбцу, чтобы вставить новую строку в таблицу.
Ограничение FOREIGN KEY
Внешний ключ (foreign key) — это столбец или комбинация столбцов, которые используются для установления и обеспечения взаимосвязи между данными в двух таблицах.
Ниже — диаграмма, которая показывает связь между таблицами сотрудников (employees
) и отделов (departments
). Если вы внимательно посмотрите на нее, то заметите, что столбец dept_id
таблицы сотрудников совпадает со столбцом первичного ключа таблицы отделов. Поэтому столбец dept_id
таблицы сотрудников является внешним ключом для таблицы отделов.
В MySQL можно создать внешний ключ, задав ограничение FOREIGN KEY
при создании таблицы следующим образом.
Пример
В следующей SQL-инструкции мы определяем столбец dept_id
таблицы employees
как внешний ключ, который ссылается на столбец dept_id
таблицы departments
.
CREATE TABLE employees ( emp_id INT NOT NULL PRIMARY KEY, emp_name VARCHAR(55) NOT NULL, hire_date DATE NOT NULL, salary INT, dept_id INT, FOREIGN KEY (dept_id) REFERENCES departments(dept_id) );
Ограничение CHECK
Ограничение CHECK
используется для ограничения значений, которые могут быть помещены в столбец.
Например, диапазон значений для столбца зарплаты salary
можно ограничить, создав ограничение CHECK
, которое допускает значения только от 30 000 до 100 000. Это предотвратит ввод зарплат за пределами обычного (условного) диапазона.
Пример
CREATE TABLE employees ( emp_id INT NOT NULL PRIMARY KEY, emp_name VARCHAR(55) NOT NULL, hire_date DATE NOT NULL, salary INT NOT NULL CHECK (salary >= 3000 AND salary <= 10000), dept_id INT, FOREIGN KEY (dept_id) REFERENCES departments(dept_id) );
Примечание. MySQL не поддерживает ограничение CHECK.