В SQL мы можем применить правила к столбцу, известные как ограничения. Эти правила относятся к данным, которые могут храниться в столбце. Например, если столбец имеет ограничение NOT NULL
, то он не сможет хранить значения NULL.
В SQL используются следующие ограничения:
Ограничение | Описание |
NOT NULL | Значения не могут быть NULL. |
UNIQUE | Значения должны быть уникальными и не могут совпадать с уже существующими. |
PRIMARY KEY | Используется для уникальной идентификации строки. |
FOREIGN KEY | Ссылается на строку в другой таблице. |
CHECK | Проверяет условие для вставки нового значения. |
DEFAULT | Устанавливает значение по умолчанию, если оно не передано. |
CREATE INDEX | Используется для ускорения процесса поиска/чтения данных. |
Примечание: Эти ограничения также называются ограничениями целостности данных.
Ограничение NOT NULL
Ограничение NOT NULL означает, что столбец не может хранить значения NULL
. Например:
1 2 3 4 5 |
CREATE TABLE Colleges ( college_id INT NOT NULL, college_code VARCHAR(20) NOT NULL, college_name VARCHAR(50) ); |
Здесь столбцы college_id и college_code таблицы Colleges не могут иметь значения NULL
.
Ограничение UNIQUE
Ограничение UNIQUE означает, что столбец должен иметь уникальное значение. Например:
1 2 3 4 5 |
CREATE TABLE Colleges ( college_id INT NOT NULL UNIQUE, college_code VARCHAR(20) UNIQUE, college_name VARCHAR(50) ); |
Здесь значение столбца college_code должно быть уникальным. Точно так же значение college_id должно быть уникальным, к тому же еще и без значений NULL
.
Ограничение PRIMARY KEY
Ограничение PRIMARY KEY — это просто комбинация ограничений NOT NULL
и UNIQUE
. Это означает, что значение столбца используется для уникальной идентификации строки. Например:
1 2 3 4 5 |
CREATE TABLE Colleges ( college_id INT PRIMARY KEY, college_code VARCHAR(20) NOT NULL, college_name VARCHAR(50) ); |
Здесь значение столбца college_id является уникальным идентификатором строки. К тому же он не может хранить значение NULL
и должен быть уникальным (UNIQUE
).
Ограничение FOREIGN KEY
Ограничение FOREIGN KEY (в некоторых СУБД ограничение REFERENCES) в столбце используется для ссылки на данные из другой таблицы. Например:
1 2 3 4 |
CREATE TABLE Orders ( order_id INT PRIMARY KEY, customer_id int REFERENCES Customers(id) ); |
Здесь значением customer_id в таблице Orders должно быть значение из столбца id таблицы Customers.
Ограничение CHECK
Ограничение CHECK проверяет условие, прежде чем разрешить поместить значение в столбец. Например:
1 2 3 4 |
CREATE TABLE Orders ( order_id INT PRIMARY KEY, amount int CHECK (amount >= 100) ); |
Здесь значение столбца amount должно быть больше или равно 100. В противном случае SQL выдаст ошибку.
Ограничение DEFAULT
Ограничение DEFAULT используется для установки значения по умолчанию, если мы пытаемся поместить NULL
в столбец. Например:
1 2 3 4 5 |
CREATE TABLE College ( college_id INT PRIMARY KEY, college_code VARCHAR(20), college_country VARCHAR(20) DEFAULT 'Japan' ); |
Здесь значением по умолчанию для столбца college_country является Japan
. Если мы попытаемся поместить значение NULL
в столбец college_country, то значением все равно будет Japan
.
Ограничение CREATE INDEX
Если столбец имеет ограничение CREATE INDEX, то извлечение данных произойдет быстрее, если мы будем использовать именно этот столбец для получения данных. Например:
1 2 3 4 5 6 7 8 9 10 |
-- Создаем таблицу CREATE TABLE Colleges ( college_id INT PRIMARY KEY, college_code VARCHAR(20) NOT NULL, college_name VARCHAR(50) ); -- Добавляем ограничение CREATE INDEX college_index ON Colleges(college_code); |
Здесь мы создаем индекс с именем college_index в таблице Colleges, используя столбец college_code.
Примечание: Индекс — это объект базы данных, создаваемый с целью повышения производительности поиска данных. Таблицы в базе данных могут иметь большое количество строк, которые хранятся в произвольном порядке, и их поиск по заданному критерию путем последовательного просмотра таблицы строка за строкой может занимать много времени. Словно закладка в книге, индекс помогает быстро получить доступ к требуемым данным в таблице, согласно SQL-запросу. Таким образом, использование индексов позволяет ускорить получение данных.
Примечание: Увидеть разницу в скорости при малом количестве данных в таблице проблематично. Однако при большом количестве данных можно легко заметить разницу в скорости между использованием индексов и без них.