Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
interaktivnoe_programirovanie_internet-prilozheniy (1).docx
Скачиваний:
4
Добавлен:
01.07.2025
Размер:
4 Мб
Скачать
☆

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

Для контроля ссылочной целостности в базе данных, необходимо чтобы таблицы были связаны при помощи конструкции FOREIGN KEY, которая имеет вид:

FOREIGN KEY [index_name] (index_col_name, …) REFERENCES tbl_name (index_col_name,…) [ON DELETE {RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT}] [ON UPDATE {RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT}]

FOREIGN KEY используется при создании/изменении таблиц-потомков таблицах. Данная конструкция позволяет задать в таблице-потомке внешний ключ с именем index_name на столбцах таблицы, которые перечисляются в круглых скобках. Можно использовать один или несколько столбцов.

Ключевое слово REFERENCES задаёт таблицу-предка tbl_name, на которую будет ссылаться внешний ключ. Один или несколько полей таблицы-предка задаются в круглых скобках.

Необязательные конструкции ON DELETE и ON UPDATE, определяют поведение MySQL при удалении/обновлении записей из таблицы-предка. Допустимые параметры для ключевых слов ON DELETE и ON UPDATE:

  • RESTRICT. Если в таблице-потомке существуют записи, ссылающиеся на первичный ключ таблицы-предка, то при удалении или обновлении записей с этим первичным ключом в таблице предке будет возвращена ошибка. Ошибка будет возвращаться до тех пор, пока не останется ни одной ссылки в таблице потомке. В MySQL данный параметр означает то же самое, что и NO ACTION.

  • CASCADE . При удалении/обновлении записей в таблице-предке будут также обновлены/удалены записи из таблицы-потомка с существующим первичным ключом.

  • SET NULL. При удалении/обновлении записей в таблице-предке записи из таблицы-потомка с существующим первичным ключом будут обновлены на NULL.

  • NO ACTION — При удалении/обновлении записей в таблице-предке записи из таблицы-потомка с существующим первичным ключом изменены не будут. В MySQL данный параметр означает то же самое что и RESTRICT.

  • SET DEFAULT. Это действие зарезервировано, но не обрабатывается в InnoDB.

В нашем примере FOREIGN KEY следует использовать в таблице content для того, чтобы связать ее с таблицей pages.

На рисунках 173-174 показан процесс добавления FOREIGN KEY в таблице content с помощью визуального интерфейса. Для этого на вкладке «Структура» следует выбрать ссылку «Связи».

Рисунок173 - Процесс добавления FOREIGN KEY

Рисунок 174 - FOREIGN KEY добавлен

После добавления мы можем перейти во вкладку «Дизайнер» нашей базы данных (см. рис. 175), где увидим, что между таблицами установилась связь.

Рисунок 175 – Связь между таблицами pages и content

Изменение столбцов в таблице

Для добавления столбцов используют следующую запись:

ALTER TABLE table_name

ADD column_name datatype

Для удаления столбцов используют следующую запись:

ALTER TABLE table_name

DROP COLUMN column_name

Для изменения типа данных столбцов используют запись:

ALTER TABLE table_name

MODIFY COLUMN column_name datatype

При создании таблицы pages мы не создавали поле для хранения ссылок на разделы. Добавим его сейчас, используя запись:

ALTER TABLE `pages` ADD `link` VARCHAR(100) NOT NULL AFTER `name`;