SQL

Теория: Основные ограничения полей

Ограничения (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;
idusernameemailfirst_namelast_namecreated_at
1Duncan3Trevion53@yahoo.comLucienneFeil2022-06-14T18:31
.296Z
2Michaela11Baylee52@yahoo.comRamiroWolf2022-06-14T02:04
.104Z
3Margarete_Hegmann6Casimer_Cronin@yahoo.comMaureenRomaguera2022-06-14T02:28
.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. Они помогают обеспечить целостность данных и предотвращают появление ошибок. Помните об этих ограничениях при работе с базами данных и используйте их с умом.

Рекомендуемые программы