MySQL. Урок 13. Ограничения (Constraints).

Ограничения — это механизм обеспечения целостности данных в БД. Используя ограничения, мы предотвращаем запись в БД некорректных данных, которые могут нарушить работу системы. Примерами ограничений могут быть: использование ненулевых (NOT NULL значений), использование ограничений на уникальность (UNIQUE) или ограничения при создании внешних ключей. Поговорим о каждом из них поподробнее.

Обработка NULL-значений.

Возможно, присутствие значения NULL по умолчанию в поле нежелательно, например, название книги — это обязательный атрибут и он должен иметь какое-то значение при вставке нового элемента в базу данных. Можно добавить это ограничение к вашей таблице, используя следующий синтаксис:

Это ограничение можно было задать и сразу при создании таблицы. Тогда запрос выглядел был следующим образом:

Теперь давайте посмотрим на таблицу, чтобы увидеть результат применения нашего ограничения:

Да, мы видим, что поле title действительно не может быть пустым.

Ограничение уникальности.

Это ограничение является одним из условий первичного ключа и устанавливается неявно при указании спецификатора PRIMARY KEY. При установке данного ограничения на какой-то столбец в таблицу больше нельзя будет вставить две строки с одинаковым значением этого столбца. Например, в нашей системе учета пользователей не может быть двух одинаковых логинов. Поэтому вполне логично сделать такое поле уникальным. Уникальность столбца определяется спецификатором UNIQUE. Давайте ради примера создадим такую таблицу:

На поле login мы накладываем сразу два ограничения: первое — уже знакомое нам NOT NULL, а второе — ограничение на уникальность значений в столбце, заданное при помощи спецификатора UNIQUE.

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

Сокращение UNI в столбце key как раз и указывает нам на ограничение уникальности для столбца login.

Ограничение внешнего ключа.

Что будет если вы попытаетесь из таблицы authors удалить одну из записей. Что случится с записями в дочерней таблице (в данном случае это таблица books). Книги останутся без авторов? Видимо это не лучший вариант. Наверное, в этом случае нужно было просто удалить все связанные с данным автором книги. Чтобы задать данное ограничение используется конструкция ON DELETE.

Существуют ее несколько вариантов:

  • ON DELETE CASCADE — при удалении записи все связанные записи в дочерних таблицах также будут удалены.
  • ON DELETE SET NULL — соответствующим значениям в дочерней таблице будет присвоено значение специальное NULL.
  • ON DELETE RESTRICT — удаление соответствующих записей в родительской таблице будет запрещено.

Наверное, наиболее часто используемое ограничение — ON DELETE CASCADE (каскадное удаление). Его то мы и применим к нашему внешнему ключу author_id:

Также ограничение можно было задать схожим образом сразу при создании таблицы.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *