Ограничения (constraints) в SQL - это правила, устанавливаемые для столбцов таблицы, которые определяют допустимые значения для этих столбцов. Ограничения в SQL обеспечивают целостность данных и помогают предотвратить ошибки при вставке, обновлении или удалении данных.
В предыдущих уроках мы уже познакомились с одним ограничением PRIMARY _KEY
В этом уроке рассмотрим ограничения UNIQUE
и NOT NULL
.
Ограничение UNIQUE
Ограничение UNIQUE
гарантирует, что значение столбца (или комбинация столбцов) в таблице будут уникальными. Это означает, что в столбце не может быть двух одинаковых значений. При попытке вставить или обновить значение, которое уже существует в столбце с ограничением UNIQUE
, будет выдана ошибка.
Пример создания ограничения UNIQUE
:
CREATE TABLE users (
id BIGINT PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
username VARCHAR(50),
email VARCHAR(255) UNIQUE,
first_name VARCHAR(50),
last_name VARCHAR(50),
created_at TIMESTAMP
);
INSERT INTO users (created_at, email, first_name, last_name, username) VALUES ('2022-06-14 18:31:05.296', 'Trevion53@yahoo.com', 'Lucienne', 'Feil', 'Duncan3');
INSERT INTO users (created_at, email, first_name, last_name, username) VALUES ('2022-06-14 02:04:13.104', 'Baylee52@yahoo.com', 'Ramiro', 'Wolf', 'Michaela11');
INSERT INTO users (created_at, email, first_name, last_name, username) VALUES ('2022-06-14 02:28:26.058', 'Casimer_Cronin@yahoo.com', 'Maureen', 'Romaguera', 'Margarete_Hegmann6');
SELECT * FROM users;
id | username | first_name | last_name | created_at | |
---|---|---|---|---|---|
1 |
Duncan3 |
Trevion53@yahoo.com |
Lucienne |
Feil |
2022-06-14T18:31:05.296Z |
2 |
Michaela11 |
Baylee52@yahoo.com |
Ramiro |
Wolf |
2022-06-14T02:04:13.104Z |
3 |
Margarete_Hegmann6 |
Casimer_Cronin@yahoo.com |
Maureen |
Romaguera |
2022-06-14T02:28:26.058Z |
View on DB Fiddle
Если добавить значение повторно, то запрос завершится с ошибкой:
--- этот email уже существует
INSERT INTO users (created_at, email, first_name, last_name, username) VALUES ('2022-06-14 02:28:26.058', 'Casimer_Cronin@yahoo.com', 'Caleigh', 'Connelly', 'Curtis_Baumbach');
Query Error: error: duplicate key value violates unique constraint "users_email_key"
View on DB Fiddle
Ограничение NOT NULL
Ограничение NOT NULL
требует, чтобы значение в столбце не было NULL
. Это означает, что при добавлении или обновлении записи в таблице, значение в столбце с ограничением NOT NULL
должно быть обязательно указано.
Пример создания ограничения NOT NULL
:
CREATE TABLE users (
id BIGINT PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
username VARCHAR(50) NOT NULL,
email VARCHAR(255) UNIQUE,
first_name VARCHAR(50),
last_name VARCHAR(50),
created_at TIMESTAMP
);
INSERT INTO users (created_at, email, first_name, last_name, username) VALUES ('2022-06-14 18:31:05.296', 'Trevion53@yahoo.com', 'Lucienne', 'Feil', 'Duncan3');
INSERT INTO users (created_at, email, first_name, last_name, username) VALUES ('2022-06-14 02:04:13.104', 'Baylee52@yahoo.com', 'Ramiro', 'Wolf', 'Michaela11');
INSERT INTO users (created_at, email, first_name, last_name, username) VALUES ('2022-06-14 02:28:26.058', 'Casimer_Cronin@yahoo.com', 'Maureen', 'Romaguera', 'Margarete_Hegmann6');
View on DB Fiddle
INSERT INTO users (created_at, email, first_name, last_name, username) VALUES ('2022-06-14 02:28:26.058', 'Angelita.Altenwerth96@hotmail.com', 'Caleigh', 'Connelly', NULL);
Query Error: error: null value in column "username" of relation "users" violates not-null constraint
Несколько ограничений одновременно
CREATE TABLE users (
id bigint PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
username VARCHAR(50) UNIQUE NOT NULL,
birthday DATE,
email_confirmed BOOLEAN,
email VARCHAR(255) UNIQUE NOT NULL,
gender VARCHAR(255) NOT NULL,
password_digest VARCHAR(255) NOT NULL,
first_name VARCHAR(50),
last_name VARCHAR(50),
created_at TIMESTAMP NOT NULL
);
View on DB Fiddle
В данном примере мы создали таблицу users со множеством полей. Поле id является первичным ключом и генерируется автоматически. Поле username имеет ограничение UNIQUE
— его значение должно быть уникальным, а также не может быть пустым благодаря ограничению NOT NULL
. Поле email имеет ограничение UNIQUE
и NOT NULL
, гарантируя уникальность и наличие email адреса для каждого пользователя.
Выводы
Ограничения позволяют гарантировать целостность данных и избежать ошибок. Ограничение UNIQUE
гарантирует уникальность значений в указанном поле. NOT NULL
требует, чтобы значение в указанном поле не было NULL, то есть присутствовало всегда.
Ограничения UNIQUE и NOT NULL играют важную роль при проектировании баз данных в SQL. Они помогают обеспечить целостность данных и предотвращают появление ошибок. Помните об этих ограничениях при работе с базами данных и используйте их с умом.
Остались вопросы? Задайте их в разделе «Обсуждение»
Вам ответят команда поддержки Хекслета или другие студенты
- Статья «Как учиться и справляться с негативными мыслями»
- Статья «Ловушки обучения»
- Статья «Сложные простые задачи по программированию»
- Вебинар «Как самостоятельно учиться»
Для полного доступа к курсу нужен базовый план
Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.