logo

MySQL ПРИ ИЗТРИВАНЕ НА КАСКАДА

Клаузата ON DELETE CASCADE в MySQL се използва за автоматично Премахване съвпадащите записи от дъщерната таблица, когато изтрием редовете от родителската таблица. Това е вид препращащо действие, свързано с външен ключ .

Да предположим, че сме създали две таблици с ВЪНШЕН КЛЮЧ във връзка с външен ключ, което прави и двете таблици родител и дете. След това дефинираме клауза ON DELETE CASCADE за един FOREIGN KEY, който трябва да бъде зададен, за да може другият да успее в каскадните операции. Ако ON DELETE CASCADE е дефинирана само за една клауза FOREIGN KEY, тогава каскадните операции ще изведат грешка.

MySQL ПРИ ИЗТРИВАНЕ НА КАСКАДА Пример

Нека разберем как можем да използваме клаузата 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, за да проверите данните в таблица, която може да бъде показана по-долу:

как да превърнете низ в int
MySQL ПРИ ИЗТРИВАНЕ НА КАСКАДА

Таблица: Плащане

Изявлението по-долу създава таблица Плащане:

 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 ПРИ ИЗТРИВАНЕ НА КАСКАДА

Позволи ни Изтрий данни от родителската таблица Employee. За да направите това, изпълнете следния оператор:

 mysql> DELETE FROM Employee WHERE emp_id = 102; 

Горното изявление ще изтрие записите на служителите, чиито emp_id = 102 и рефериране данни в дъщерната таблица. Можем да проверим данните с помощта на оператора SELECT, който ще даде следния резултат:

MySQL ПРИ ИЗТРИВАНЕ НА КАСКАДА

В горния изход можем да видим, че всички редове, препращащи към emp_id = 102, са автоматично изтрити от двете таблици.

Как да намеря засегнатата таблица чрез действие ON DELETE CASCADE?

Понякога, преди да изтрием записи от таблицата, искаме да знаем засегнатата таблица чрез референтното действие ON DELETE CASCADE. Можем да намерим тази информация чрез запитване от referential_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 в служителб база данни:

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

След като изпълним горната команда, ще получим резултата по-долу:

MySQL ПРИ ИЗТРИВАНЕ НА КАСКАДА

MySQL ПРИ АКТУАЛИЗАЦИЯ КАСКАДА

Клауза ON UPDATE CASCADE в MySQL се използва за актуализация съвпадащите записи от дъщерната таблица автоматично, когато актуализираме редовете в родителската таблица. Следващият пример го обяснява по-ясно.

Първо, трябва да използваме АЛТЕР ТАБЛИЦА израз за добавяне на клаузата ON UPDATE CASCADE в таблицата Плащане, както е показано по-долу:

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

Той ще даде следния резултат:

MySQL ПРИ ИЗТРИВАНЕ НА КАСКАДА

В скрипта по-долу ще актуализираме идентификатора на служителя в родителската таблица и той автоматично ще отрази тази промяна и в дъщерната таблица:

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

Проверявайки съдържанието на таблицата за служители и плащания, ще видим това emp_id стойностите на колоните ще бъдат актуализирани успешно.

MySQL ПРИ ИЗТРИВАНЕ НА КАСКАДА