logo

MySQL ON DELETE CASCADE

Речення ON DELETE CASCADE в MySQL використовується для автоматичного видалити відповідні записи з дочірньої таблиці, коли ми видаляємо рядки з батьківської таблиці. Це своєрідна референційна дія, пов’язана з зовнішній ключ .

Припустімо, ми створили дві таблиці з FOREIGN KEY у зв’язку зовнішнього ключа, що робить обидві таблиці батьківською та дочірньою. Далі ми визначаємо пропозицію ON DELETE CASCADE для одного FOREIGN KEY, який потрібно встановити, щоб інший міг успішно виконувати каскадні операції. Якщо ON DELETE CASCADE визначено лише для однієї пропозиції FOREIGN KEY, каскадні операції викличуть помилку.

Приклад MySQL ON DELETE CASCADE

Давайте зрозуміємо, як ми можемо використовувати пропозицію ON DELETE CASCADE у таблиці MySQL. Спочатку ми створимо дві таблиці з іменами Співробітник і оплата . Обидві таблиці пов’язані через зовнішній ключ із каскадною операцією видалення. Тут працівник – це батьківська таблиця , і оплата є дочірній стіл . Наступні сценарії створюють обидві таблиці разом із їхніми записами.

Таблиця: Співробітник

Наступний оператор створює таблицю Employee:

 CREATE TABLE Employee ( emp_id int(10) NOT NULL, name varchar(40) NOT NULL, birthdate date NOT NULL, gender varchar(10) NOT NULL, hire_date date NOT NULL, PRIMARY KEY (emp_id) ); 

Далі виконайте запит на вставку, щоб заповнити записи.

 INSERT INTO Employee (emp_id, name, birthdate, gender, hire_date) VALUES (101, 'Bryan', '1988-08-12', 'M', '2015-08-26'), (102, 'Joseph', '1978-05-12', 'M', '2014-10-21'), (103, 'Mike', '1984-10-13', 'M', '2017-10-28'), (104, 'Daren', '1979-04-11', 'M', '2006-11-01'), (105, 'Marie', '1990-02-11', 'F', '2018-10-12'); 

Виконайте запит SELECT, щоб перевірити дані в таблиці, яку можна показати нижче:

MySQL ON DELETE CASCADE

Таблиця: Оплата

Наведений нижче оператор створює таблицю Payment:

 CREATE TABLE Payment ( payment_id int(10) PRIMARY KEY NOT NULL, emp_id int(10) NOT NULL, amount float NOT NULL, payment_date date NOT NULL, FOREIGN KEY (emp_id) REFERENCES Employee (emp_id) ON DELETE CASCADE ); 

Далі виконайте вставити заяву заповнити записи в таблиці.

 INSERT INTO Payment (payment_id, emp_id, amount, payment_date) VALUES (301, 101, 1200, '2015-09-15'), (302, 101, 1200, '2015-09-30'), (303, 101, 1500, '2015-10-15'), (304, 101, 1500, '2015-10-30'), (305, 102, 1800, '2015-09-15'), (306, 102, 1800, '2015-09-30'); 

Виконайте запит SELECT, щоб перевірити дані в таблиці, яку можна показати нижче:

MySQL ON DELETE CASCADE

дозвольте нам видалити дані з батьківської таблиці Employee. Для цього виконайте наступний оператор:

 mysql> DELETE FROM Employee WHERE emp_id = 102; 

Наведена вище заява видаляє записи про співробітників emp_id = 102 і посилання дані в дочірню таблицю. Ми можемо перевірити дані за допомогою оператора SELECT, який дасть наступний результат:

MySQL ON DELETE CASCADE

У наведеному вище виводі ми бачимо, що всі рядки, які посилаються на emp_id = 102, були автоматично видалені з обох таблиць.

Як знайти уражену таблицю за допомогою дії ON DELETE CASCADE?

Іноді, перш ніж видаляти записи з таблиці, ми хочемо дізнатися, на яку таблицю впливає референтна дія ON DELETE CASCADE. Ми можемо знайти цю інформацію, зробивши запит у reference_constraints у базі даних information_schema таким чином:

 USE information_schema; SELECT table_name FROM referential_constraints WHERE constraint_schema = 'database_name' AND referenced_table_name = 'parent_table' AND delete_rule = 'CASCADE' 

Наведений нижче оператор створює результат щодо таблиць, пов’язаних із таблицею Employee із правилом ON DELETE CASCADE у працівникb база даних:

 USE information_schema; SELECT table_name FROM referential_constraints WHERE constraint_schema = 'employeedb' AND referenced_table_name = 'Employee' AND delete_rule = 'CASCADE'; 

Після виконання наведеної вище команди ми отримаємо наступний результат:

java do while цикл
MySQL ON DELETE CASCADE

MySQL НА ОНОВЛЕННЯ КАСКАДУ

Речення ON UPDATE CASCADE в MySQL звик оновлення відповідні записи з дочірньої таблиці автоматично, коли ми оновлюємо рядки в батьківській таблиці. Наступний приклад пояснює це більш чітко.

По-перше, нам потрібно використовувати ЗМІНИТИ ТАБЛИЦЮ оператор, щоб додати речення ON UPDATE CASCADE у таблицю Payment, як показано нижче:

 ALTER TABLE Payment ADD CONSTRAINT `payment_fk` FOREIGN KEY(emp_id) REFERENCES Employee (emp_id) ON UPDATE CASCADE; 

Це дасть наступний результат:

MySQL ON DELETE CASCADE

У наведеному нижче сценарії ми оновимо ідентифікатор працівника в батьківській таблиці, і це також автоматично відобразить цю зміну в дочірній таблиці:

 mysql> UPDATE Employee SET emp_id = 102 WHERE emp_id = 103; 

Перевіривши вміст таблиці Employee and Payment, ми це побачимо emp_id значення стовпців буде успішно оновлено.

MySQL ON DELETE CASCADE