Как да използвате ограниченията на външните ключове на MySQL

How Use Mysql Foreign Key Constraints



Ограничението на външния ключ се използва за създаване на връзка между две таблици в базата данни MySQL. Много важна характеристика на MySQL е да задава различни видове ограничения за съответните таблици. За да дефинирате ограничение на външен ключ за всяка таблица, трябва да използвате първичния ключ на друга таблица. Първичният ключ е уникален ключ за таблица за идентифициране на конкретния ред в таблицата и когато този първичен ключ се използва в друга таблица за създаване на връзка един към един или един към много или много към много, тогава той се нарича чужд ключ. Характеристиките на чужди ключове и как тези ключове могат да се използват в MySQL таблици са показани в тази статия.

Характеристики на ограниченията на чужди ключове:

Някои важни характеристики на ограничението на външния ключ са обяснени по -долу.







  • Типът данни на външния ключ, който се използва в дъщерната таблица, трябва да е същият с типа на данните на първичния ключ, който се използва в родителската таблица за препращане към външния ключ.
  • Всяка колона с индекс или няколко колони може да бъде посочена като външен ключ само за таблицата InnoDB.
  • За създаване на външен ключ са необходими привилегии за препратки или поне една от привилегиите на изразите SELECT, INSERT, UPDATE и DELETE.
  • Чужд ключ може да бъде създаден по два начина. Едно чрез използване на оператора CREATE и друго чрез използване на оператора ALTER.

Предпоставка:

Преди да създадете ограничение за външен ключ, трябва да създадете база данни и родителска таблица с първичния ключ. Да предположим, че името на базата данни е „ библиотека “И съдържа две родителски таблици с име„ книги ' и ' кредитополучател “. Направете връзка с MySQL сървъра, като използвате mysql клиент и изпълнете следните SQL изрази, за да създадете базата данни и таблиците.



СЪЗДАВАЙТЕ БАЗА ДАННИ библиотека;
ИЗПОЛЗВАЙТЕ библиотека;

СЪЗДАВАЙТЕ ТАБЛИЦА книги(
документ за самоличност INT НЕ НУЛА АВТОМАТИЧНО УВЕЛИЧАВАНЕ ,
заглавие varchar (петдесет) НЕ НУЛА ,
автор varchar (петдесет) НЕ НУЛА ,
издател varchar (петдесет) НЕ НУЛА ,
ОСНОВЕН КЛЮЧ (документ за самоличност)
) ДВИГАТЕЛ = INNODB ;

СЪЗДАВАЙТЕ ТАБЛИЦА кредитополучатели(
документ за самоличност ВАРЧАР (петдесет) НЕ НУЛА ,
име varchar (петдесет) НЕ НУЛА ,
адрес varchar (петдесет) НЕ НУЛА ,
електронна поща varchar (петдесет) НЕ НУЛА ,
ОСНОВЕН КЛЮЧ (документ за самоличност)
) ДВИГАТЕЛ = INNODB ;



Определете ограничението на външния ключ, като използвате израза CREATE

Създайте таблица с име „ book_borrow_info „С ограничения на външен ключ чрез изпълнение на следния израз. Тук, book_id полето е а външен ключ за тази таблица и всяка стойност на това поле трябва да съществува в документ за самоличност в сферата на книги маса. книги е родителската таблица и book_borrow_info е детската маса. Тук с външния ключ също са зададени две ограничения. Това са ИЗТРИЙ КАЗКАДА и АКТУАЛИЗИРАНЕ НА КАЗКАДА . Това означава, че ако някой първичен ключ ще бъде премахнат или актуализиран от родителската таблица, съответните записи, свързани с дъщерна таблица, свързани с външния ключ, ще бъдат премахнати или външният ключ ще бъде актуализиран.





СЪЗДАВАЙТЕ ТАБЛИЦА book_borrow_info(
borrow_id ВАРЧАР (петдесет),
book_id INT ,
date_date ДАТА НЕ НУЛА ,
дата на връщане ДАТА НЕ НУЛА ,
състояние ВАРЧАР (петнадесет) НЕ НУЛА ,
ИНДЕКС par_ind(book_id),
ОСНОВЕН КЛЮЧ (borrow_id,date_date),
ЧУЖДЕН КЛЮЧ (book_id) ПРЕПРАТКИ книги(документ за самоличност)
НА ИЗТРИЙ КАСКАД
НА АКТУАЛИЗИРАНЕ КАСКАД
) ДВИГАТЕЛ = INNODB ;

Сега изпълнете следните SQL изрази, за да вмъкнете някои записи в двете таблици. Първият оператор INSERT ще вмъкне четири записа в книги маса. Четирите стойности на документ за самоличност в сферата на книги таблицата ще бъде 1, 2, 3 и 4 за атрибута за автоматично увеличаване. Вторият оператор INSERT ще вмъкне четири записа в book_borrow_info базирани на документ за самоличност стойност на книги маса.



ИНСЕРТ ВЪВ книги СТОЙНОСТИ
( НУЛА , 'Да убиеш присмехулник', 'Харпър Лий', „Grand Central Publishing“),
( НУЛА , „Сто години самота“, 'Гарсия Маркес', „Лутфи Озкок“),
( НУЛА , „Път към Индия“, „Форстър, Е.М.“, „Библиотека с изображения на Би Би Си Хълтън“),
( НУЛА , 'Невидим човек', 'Ралф Елисън', „Encyclopædia Britannica, Inc.“);

ИНСЕРТ ВЪВ book_borrow_info СТОЙНОСТИ
('123490', 1, „2020-02-15“, „2020-02-25“, 'Се завърна'),
('157643', 2, „2020-03-31“, „2020-03-10“, „В очакване“),
('174562', 4, „2020-04-04“, „2020-04-24“, „Назаем“),
('146788', 3, „2020-04-10“, „2020-01-20“, „Назаем“);

Ако се опитате да вмъкнете стойност в полето за външен ключ на дъщерната таблица, която не съществува в полето за първичен ключ на родителската таблица, MySQL ще генерира грешка. Следният SQL израз ще генерира грешка, защото родителската таблица, книги не съдържа стойност на идентификатор 10 .

ИНСЕРТ ВЪВ book_borrow_info СТОЙНОСТИ
('195684', 10, „2020-04-15“, „2020-04-30“, 'Се завърна');

След изпълнение на следния оператор DELETE, когато четвъртият запис ще бъде премахнат от книги таблица, след това свързаните записи от book_borrow_info таблицата ще бъде премахната автоматично за ограничението на външния ключ.

ИЗТРИЙ ОТ книги КЪДЕТО документ за самоличност= 4;
SELECT * от книги;
SELECT * от book_borrow_info;

Определете ограничението на външния ключ, като използвате оператора ALTER

Отначало вмъкнете някои записи в кредитополучатели таблица и тази таблица ще бъде определена като родителска таблица в следващата ВЪЗРАСТ изявление.

ИНСЕРТ ВЪВ кредитополучатели СТОЙНОСТИ
('123490', 'Патрик Ууд', '34 West Street LANCASTER LA14 9ZH ', '[защитен имейл]'),
('157643', „Езра Мартин“, '10 The Grove BIRMINGHAM B98 1EU ', '[защитен имейл]'),
('174562', „Джон Инес Арчи“, '55 Main Road LIVERPOOL L2 3OD ', '[защитен имейл]'),
('146788', 'Фредерик Хансън', '85 Highfield Road SHREWSBURY SY46 3ME ', '[защитен имейл]');

Изпълнете следното ВЪЗРАСТ израз, за ​​който да зададете друго ограничение за външен ключ book_borrow_info маса, с която да установите връзката кредитополучатели маса. Тук, borrow_id се дефинира като външен ключ за book_borrow_info маса.

ALTER TABLE book_borrow_info ДОБАВИ ОГРАНИЧЕНИЕ fk_borrower
ЧУЖДЕН КЛЮЧ(borrow_id)ЛИТЕРАТУРА кредитополучатели(документ за самоличност)ОТ ИЗТРИВАНЕ НА КАСКАД НА ОГРАНИЧЕНИЕ НА АКТУАЛИЗАЦИЯТА;

Сега вмъкнете запис в book_borrow_info с валидни borrow_id стойност, която съществува в документ за самоличност в сферата на кредитополучатели маса. 157643 стойност съществува в таблицата на заемополучателите и следният израз INSERT ще бъде изпълнен успешно.

ИНСЕРТ ВЪВ book_borrow_info СТОЙНОСТИ
('157643', 1, „2020-03-10“, „2020-03-20“, 'Се завърна');

Следният оператор INSERT ще генерира съобщение за грешка, защото стойността на id 195680 не съществува в таблицата на кредитополучателите.

ИНСЕРТ ВЪВ book_borrow_info СТОЙНОСТИ
('195680', 1, „2020-04-15“, „2020-04-30“, 'Се завърна');

Заключение:

Определянето на ограниченията на външния ключ правилно е много важна задача за създаване на релационна база данни и управление на данните между таблиците по подходящ начин. Познаването на използването на ограниченията на чужди ключове е много важно за дизайнерите на бази данни. Надявам се тази статия да помогне на новите дизайнери на бази данни да разберат концепцията за ограниченията на чужди ключове и да ги приложат правилно в своите задачи.