logo

МиСКЛ НА ДЕЛЕТЕ ЦАСЦАДЕ

ОН ДЕЛЕТЕ ЦАСЦАДЕ клаузула у МиСКЛ се користи за аутоматски уклонити подударне записе из подређене табеле када избришемо редове из надређене табеле. То је нека врста референтне радње која се односи на страни кључ .

Претпоставимо да смо креирали две табеле са СТРАНИМ КЉУЧОМ у односу страног кључа, чинећи обе табеле родитељском и подређеном. Затим дефинишемо клаузулу ОН ДЕЛЕТЕ ЦАСЦАДЕ за један СТРАНИ КЉУЧ који мора бити подешен да би други успео у каскадним операцијама. Ако је ОН ДЕЛЕТЕ ЦАСЦАДЕ дефинисан само за једну клаузулу ФОРЕИГН КЕИ, онда ће каскадне операције изазвати грешку.

МиСКЛ ОН ДЕЛЕТЕ ЦАСЦАДЕ Пример

Хајде да разумемо како можемо да користимо клаузулу ОН ДЕЛЕТЕ ЦАСЦАДЕ у МиСКЛ табели. Прво ћемо креирати две табеле са именом Запослени и плаћање . Обе табеле су повезане преко страног кључа са каскадном операцијом брисања. Овде је запослени родитељска табела , а плаћање је дечији сто . Следеће скрипте креирају обе табеле заједно са њиховим записима.

Табела: Запослени

Следећа изјава креира табелу Емплоиее:

 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'); 

Извршите СЕЛЕЦТ упит да верификујете податке у табелу, која се може приказати у наставку:

чвор јава листе
МиСКЛ НА ДЕЛЕТЕ ЦАСЦАДЕ

Табела: Плаћање

Извод у наставку креира табелу Плаћање:

 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'); 

Извршите СЕЛЕЦТ упит да верификујете податке у табелу, која се може приказати у наставку:

МиСКЛ НА ДЕЛЕТЕ ЦАСЦАДЕ

Пусти нас избрисати подаци из матичне табеле Запослени. Да бисте то урадили, извршите следећу наредбу:

 mysql> DELETE FROM Employee WHERE emp_id = 102; 

Горња изјава ће избрисати евиденцију запослених чије емп_ид = 102 и референцирање податке у подређену табелу. Податке можемо верификовати користећи СЕЛЕЦТ наредбу која ће дати следећи излаз:

МиСКЛ НА ДЕЛЕТЕ ЦАСЦАДЕ

У горњем излазу можемо видети да су сви редови који се односе на емп_ид = 102 аутоматски избрисани из обе табеле.

Како пронаћи захваћену табелу помоћу акције ОН ДЕЛЕТЕ ЦАСЦАДЕ?

Понекад, пре брисања записа из табеле, желимо да знамо на коју табелу утиче референтна радња ОН ДЕЛЕТЕ ЦАСЦАДЕ. Ову информацију можемо пронаћи упитом из референтних_ограничења у бази података информатион_сцхема на следећи начин:

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

Наредба у наставку даје резултат о табелама повезаним са табелом Емплоиее са правилом ОН ДЕЛЕТЕ ЦАСЦАДЕ у емплоиеедб база података:

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

Након извршења горње команде, добићемо излаз испод:

МиСКЛ НА ДЕЛЕТЕ ЦАСЦАДЕ

МиСКЛ НА КАСКАДИ АЖУРИРАЊА

ОН УПДАТЕ ЦАСЦАДЕ клаузула у МиСКЛ се користи за ажурирање одговарајући записи из подређене табеле аутоматски када ажурирамо редове у надређеној табели. Следећи пример то јасније објашњава.

Прво, треба да користимо АЛТЕР ТАБЛЕ изјаву да додате клаузулу ОН УПДАТЕ ЦАСЦАДЕ у табелу Плаћање као у наставку:

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

То ће дати следећи излаз:

МиСКЛ НА ДЕЛЕТЕ ЦАСЦАДЕ

У скрипти испод, ажурираћемо ИД запосленог у родитељској табели, а он ће аутоматски одражавати ову промену и у подређеној табели:

јава метода надјачавање
 mysql> UPDATE Employee SET emp_id = 102 WHERE emp_id = 103; 

Проверићемо садржај табеле Запослени и плаћања, видећемо то емп_ид вредности колона ће бити успешно ажуриране.

МиСКЛ НА ДЕЛЕТЕ ЦАСЦАДЕ