Введение
Проверка и ограничение входных данных — это фундаментальная практика, при разработке программного обеспечения и управления данными, у этого есть причины. Во-первых, это обеспечивает целостность данных за счет соблюдения ожидаемых форматов и критериев, предотвращая такие проблемы, как неправильные типы данных или слишком длинные значения, которые могут стать проблемой для вашей системы. Во-вторых, необходимо принудительно проверять входные данные на наличие фильтра шаблонов, защищаясь от вредоносных атак. Отфильтровывая вредоносные данные, мы защищаем систему от уязвимостей и возможных утечек информации.
В этой инструкции мы рассмотрим ограничения на данные в СУБД MySQL: PRIMARY KEY, UNIQUE, CHECK, NOT NULL.
Primary Key
Первая функция для идентификации значений в таблице — первичный ключ. Это абстрактный терминологический унифицированный список правил, который помогает построить связь с различными таблицами с помощью внешнего ключа. Значения должны быть уникальными и не NULL. Например, представим, что у нас есть интернет-магазин и нам необходимо пронумеровать наших клиентов, у которых могут совпадать имя, дата рождения и другие персональные данные. В этом случае мы будем использовать это ограничение для идентификации клиента:
CREATE TABLE client (
identificator INT NOT NULL AUTO_INCREMENT,
first_name VARCHAR(30) NOT NULL,
PRIMARY KEY (identifier, first_name)
);

Создаем таблицу client со столбцами identificator и first_name, затем ниже пишем параметр PRIMARY KEY и столбцы identificate для этого. Проверим, как это работает, если наш менеджер или система добавит данные о двух клиентах:
INSERT INTO client (identificator, first_name) VALUES ('1', 'Loren');
И второго клиента — командой:
INSERT INTO client (identificator, first_name) VALUES ('2', 'Sara');
Посмотрим, что мы получим в результате этой манипуляции:
SELECT * FROM client;

Теперь каждая запись в этом столбце является идентификатором и уникальна, и если наш менеджер попытается разместить новые данные с таким же именем или идентификатором, то получит сообщение об ошибке:

Это важное ограничение в информационной системе и приложениях, где необходимо хранить персональные данные, информацию о банковских платежах и другую конфиденциальную информацию, система должна работать корректно! Если вы хотите удалить PRIMARY KEY, то вам необходимо написать:
ALTER TABLE client DROP PRIMARY KEY;
После этого ключ будет удален!
UNIQUE & NOT NULL
Следующее ограничение — имеет немного отличий от описанного выше метода. UNIQUE гарантирует, что все записи в столбце будут иметь уникальное значение! Мы уже создали таблицу и теперь нам необходимо изменить ее, добавив новый параметр:
ALTER TABLE client ADD COLUMN email VARCHAR (31) NOT NULL UNIQUE;
Проверьте формат таблицы с помощью ранее описанной команды:
DESC client;
Сначала UNIQUE-ключ будет преобразован в PRIMARY KEY, если его еще не существует, так как необходимо идентифицировать каждую строку. В этом случае необходимо добавить первичный ключ, как мы описали выше, или создать еще один столбец с UNIQUE-ключом:
ALTER TABLE client ADD COLUMN email_reserv VARCHAR (31) NOT NULL UNIQUE;
И просмотреть результат в таблице:
DESC client;

Как видно из примера, в первой таблице ключ — PRIVATE, но также мы добавили еще один столбец и значение ключа установили UNIQUE. Менеджер снова попробует добавить тот же столбец email:
INSERT INTO client (id, email, email_reserv) VALUES ('1', 'email@mail.com', 'reserv_email@mail.com');
Повторяющаяся строка:
INSERT INTO client (id, email, email_reserv) VALUES ('2', 'email@mail.com', 'reserv_email@mail.com');

Это позволяет сохранить целостность, избежать системных проблем и повысить производительность базы данных.
В последних двух методах мы не говорили еще об одном ограничении — NOT NULL. Ячейка в базе данных должна иметь определенный тип или значение, но бывают ситуации, когда мы определяем значения в процессе работы системы.
Важно отметить! NULL — это не значение, это буквально пустота. В качестве сравнения можно представить затычку, без значения!
DEFAULT & CHECK
Перейдем к рассмотрению ограничений на значения DEFAULT и CHECK. Они выполняют функции, ассоциированные с их названиями. DEFAULT предназначена для записи ранее подготовленного значения в ситуации, когда ячейка в БД не получает данных, что позволяет избежать проблем и установить значение по умолчанию. CHECK представляет собой список правил фильтрации вводимых данных, если данные соответствуют правилам, то они попадают в ячейку, в противном случае они запрещаются. В нашем магазине мы не можем продавать товар детям и подросткам, тогда нам нужно добавить правило фильтрации, и по умолчанию будет стоять значение восемнадцать:
ALTER TABLE client ADD COLUMN age INT CHECK (age BETWEEN 18 AND 65) DEFAULT 18;
DESC client;

Для проверки примененных правил фильтрации мы можем ввести данные и увидеть результат:
INSERT INTO client (id, email, email_reserv) VALUES ('4', 'mail.com', 'mail.gg');
DESC client;
Просмотрим введенные значения:
SELECT * FROM client

В таблице появляется сущность с id четыре и указанным по умолчанию возрастом, что позволяет избежать проблемы пустого поля. Но если данные не проходят проверку, то система не может добавить строку в таблицу:
INSERT INTO client (id, email, email_reserv) VALUES ('4', 'mail.com', 'mail.gg', '5')

Примечание! Если мы строим информационную систему или программу, то можем определить проблему по идентификатору или коду ошибки БД.
Вывод
Применение ограничений на данные в системе управления базами данных — важнейшая практика для обеспечения качества данных, безопасности системы и ее надежности в целом. Реализация этих ограничений позволяет создавать надежные и безопасные приложения, обеспечивающие эффективное управление и защиту данных.