рдореБрдЦреНрдп рд╕рд╛рдордЧреНрд░реА рдкрд░ рдЬрд╛рдПрдБ

SQL ON DELETE CASCADE: рдирд┐рд░реНрднрд░ рдбреЗрдЯрд╛ рдЕрдкрдиреЗ-рдЖрдк рд╣рдЯрд╛рдПрдБ

рд╕рдордЭреЗрдВ рдХрд┐ SQL ON DELETE CASCADE рдХреИрд╕реЗ SQL рдореЗрдВ рдирд┐рд░реНрднрд░ deletes рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ, рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЛ рдПрдХрд╕рдорд╛рди рд░рдЦрддрд╛ рд╣реИ, рдФрд░ рдЖрдХрд╕реНрдорд┐рдХ рдбреЗрдЯрд╛ рд╣рд╛рдирд┐ рд╕реЗ рдмрдЪрд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред
┬╖ 9 рдорд┐ре░ рдкрдврд╝реЗрдВ

AI рдХреЗ рд╕рд╛рде рдЦреЛрдЬреЗрдВ

SQL рдореЗрдВ рдбреЗрдЯрд╛ рд╣рдЯрд╛рдирд╛ рд╕рд┐рд░реНрдл рдПрдХ рдкрдВрдХреНрддрд┐ рдирд┐рдХрд╛рд▓ рджреЗрдиреЗ рддрдХ рд╕реАрдорд┐рдд рдирд╣реАрдВ рд╣реИред рд░рд┐рд▓реЗрд╢рдирд▓ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рддрд╛рд▓рд┐рдХрд╛рдПрдБ рдЕрдХреНрд╕рд░ рдЖрдкрд╕ рдореЗрдВ рдЬреБрдбрд╝реА рд╣реЛрддреА рд╣реИрдВ, рдФрд░ рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ delete рдЕрдиреНрдп рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, SQL рдореЗрдВ foreign key constraints рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рддрдп рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЬрдм рдкрдВрдХреНрддрд┐рдпрд╛рдБ рд╣рдЯрд╛рдИ рдпрд╛ рдЕрдкрдбреЗрдЯ рдХреА рдЬрд╛рддреА рд╣реИрдВ, рддреЛ рд╕рдВрдмрдВрдзрд┐рдд рдбреЗрдЯрд╛ рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреИрд╕рд╛ рд╣реЛред

рд╕рдмрд╕реЗ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА delete рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ SQL рдХрд╛ ON DELETE CASCADE constraint рд╣реИред рдпрд╣ delete рдХреЛ рд░реЛрдХрдиреЗ рдпрд╛ рдЕрдирд╛рде рд░рд┐рдХреЙрд░реНрдб рдЫреЛрдбрд╝рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рдирд┐рд░реНрджреЗрд╢ рджреЗрддрд╛ рд╣реИ рдХрд┐ рдЬреИрд╕реЗ рд╣реА рд╕рдВрджрд░реНрднрд┐рдд parent рдкрдВрдХреНрддрд┐ рд╣рдЯреЗ, рд╕рднреА рдирд┐рд░реНрднрд░ child рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдЕрдкрдиреЗ-рдЖрдк рд╣рдЯрд╛ рджреА рдЬрд╛рдПрдБред

рдЗрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдореЗрдВ, рдореИрдВ рджрд┐рдЦрд╛рдКрдБрдЧрд╛ рдХрд┐ ON DELETE CASCADE constraint рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реНрд╡рдд: cascading deletes рдХрд╛ рд╕рдорд░реНрдерди рдХреНрдпреЛрдВ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕реЗ рдХрдм рдЕрдзрд┐рдХ рдкреНрд░рддрд┐рдмрдВрдзрд╛рддреНрдордХ рдирд┐рдпрдореЛрдВ рдЬреИрд╕реЗ ON DELETE RESTRICT рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЪреБрдирдирд╛ рд╕рд╣реА рд░рд╣рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк SQL рдореЗрдВ рдирдП рд╣реИрдВ, рддреЛ рд╣рдорд╛рд░реА Introduction to SQL рдХреЛрд░реНрд╕ рд╕реЗ рд╢реБрд░реБрдЖрдд рдХрд░реЗрдВ, рдпрд╛ рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреБрдЫ рдЕрдиреБрднрд╡ рд╣реИ рддреЛ Intermediate SQL рдХреЛрд░реНрд╕ рд▓реЗрдВред┬а

SQL рдореЗрдВ ON DELETE CASCADE рдХреНрдпрд╛ рд╣реИ?

рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ ON DELETE CASCADE foreign key constraint рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдкрд╣рд▓реЗ referential integrity рдФрд░ CASCADE clause рд╕рдордЭ рд▓реЗрддреЗ рд╣реИрдВред

Referential integrity рдФрд░ foreign keys

рд░рд┐рд▓реЗрд╢рдирд▓ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рддрд╛рд▓рд┐рдХрд╛рдПрдБ foreign keys рдХреЗ рдЬрд╝рд░рд┐рдП рдЬреБрдбрд╝реА рд╣реЛрддреА рд╣реИрдВ, рдЬреЛ рдПрдХ рддрд╛рд▓рд┐рдХрд╛ (child) рдХреЗ рдХрд┐рд╕реА рдХреЙрд▓рдо рдХреЛ рджреВрд╕рд░реА рддрд╛рд▓рд┐рдХрд╛ (parent) рдХреА primary key рд╕реЗ рдЬреЛрдбрд╝рддреА рд╣реИрдВред Foreign keys referential integrity рд▓рд╛рдЧреВ рдХрд░рддреА рд╣реИрдВ рддрд╛рдХрд┐ child рдкрдВрдХреНрддрд┐ рд╣рдореЗрд╢рд╛ рдХрд┐рд╕реА рд╡реИрдз parent рдкрдВрдХреНрддрд┐ рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░реЗред┬а

рдпрджрд┐ рдпрд╣ рдкреНрд░рд╡рд░реНрддрди рди рд╣реЛ, рддреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдЖрд╕рд╛рдиреА рд╕реЗ рдЕрдирд╛рде рд░рд┐рдХреЙрд░реНрдб рдмрди рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдБ рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдРрд╕реЗ рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░реЗрдВ рдЬреЛ рдЕрдм рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИред рдЗрд╕рд▓рд┐рдП, delete рдирд┐рдпрдо рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реЛрддреЗ рд╣реИрдВ рдХрд┐ рдРрд╕реЗ orphan рдмрдирдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╣реА рдбреЗрдЯрд╛рдмреЗрд╕ рдЙрдиреНрд╣реЗрдВ рдХреИрд╕реЗ рд╕рдВрднрд╛рд▓реЗред

CASCADE рдХрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЕрд░реНрде

SQL рдореЗрдВ, ON DELETE CASCADE constraint рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рдпрд╣ рдирд┐рд░реНрджреЗрд╢ рджреЗрддрд╛ рд╣реИ рдХрд┐ рд╣рдЯрд╛рдИ рдЧрдИ parent рдкрдВрдХреНрддрд┐ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реА рд╕рднреА child рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдЕрдкрдиреЗ-рдЖрдк рд╣рдЯрд╛ рджреА рдЬрд╛рдПрдБред рдпрд╣ foreign key рдЪреЗрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреНрд░рд┐рдпрд╛ рдХреЛ рдкреБрдирд░рд╛рд╡рд░реНрддреА рд░реВрдк рд╕реЗ рдЯреНрд░рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдПрдХ рд╣реА рдПрдЯреЙрдорд┐рдХ рдЯреНрд░рд╛рдВрдЬрд╝реИрдХреНрд╢рди рдореЗрдВ рдирд┐рд░реНрднрд░ рдбреЗрдЯрд╛ рд╣рдЯрд╛рддрд╛ рд╣реИред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдХрд┐рд╕реА рдЧреНрд░рд╛рд╣рдХ рдХрд╛ рд░рд┐рдХреЙрд░реНрдб рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣ рдЙрдирдХреЗ рдСрд░реНрдбрд░реНрд╕ рдХреЛ рдорд┐рдЯрд╛ рджреЗрддрд╛ рд╣реИ, рдЬреЛ рдмрджрд▓реЗ рдореЗрдВ рдПрдХ рд╣реА рдХреНрд╡реЗрд░реА рдореЗрдВ рдСрд░реНрдбрд░ рдЖрдЗрдЯрдореНрд╕ рдХреЛ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИред

рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ ON DELETE CASCADE рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ

рдЕрдм рдЬрдм рдЖрдкрдиреЗ рд╕рдордЭ рд▓рд┐рдпрд╛ рд╣реИ рдХрд┐ CASCADE рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ, рддреЛ рджреЗрдЦреЗрдВ рдХрд┐ рдбреЗрдЯрд╛рдмреЗрд╕ рдЗрд╕ рд▓реЙрдЬрд┐рдХ рдХреЛ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред

Parent рдФрд░ child рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЗ рд╕рдВрдмрдВрдз

рдЬреИрд╕рд╛ рдХрд┐ рдЕрдм рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рдВрдмрдВрдзреЛрдВ рдореЗрдВ рдПрдХ рддрд╛рд▓рд┐рдХрд╛ parent рдХреА рднреВрдорд┐рдХрд╛ рдирд┐рднрд╛рддреА рд╣реИ, рдЬреЛ рдЕрдкрдиреЗ primary key рдХреЛ рдзрд╛рд░рдг рдХрд░рддреА рд╣реИ, рдЬрдмрдХрд┐ рджреВрд╕рд░реА child рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддреА рд╣реИ, рдЬреЛ рдЙрд╕ key рдХреЛ foreign key рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд╣реЗрдЬрддреА рд╣реИред рдЬрдм рдЖрдк parent рддрд╛рд▓рд┐рдХрд╛ рдкрд░ DELETE рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рдЗрдВрдЬрди рдкрд╣рд▓реЗ foreign key constraints рдХреА рдЬрд╛рдБрдЪ рдХрд░рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЗрдВрдбреЗрдХреНрд╕рд┐рдВрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рднреА рдирд┐рд░реНрднрд░ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреА рдкрд╣рдЪрд╛рди рддреЗрдЬрд╝реА рд╕реЗ рдХрд░ рд╕рдХреЗред

рдЬрдм parent рдкрдВрдХреНрддрд┐ рд╣рдЯрддреА рд╣реИ рддреЛ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ

рдЬрдм рдЖрдк рдХрд┐рд╕реА parent рдкрдВрдХреНрддрд┐ рдкрд░ DELETE рдХрдорд╛рдВрдб рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рдЕрдВрддрд┐рдо рдирд┐рд╖реНрдкрд╛рджрди рд╕реЗ рдкрд╣рд▓реЗ рдЕрдкрдиреА foreign key рдиреАрддрд┐рдпреЛрдВ рдХреЛ рдирд┐рдореНрди рдХреНрд░рдо рдореЗрдВ рдЬрд╛рдБрдЪрддрд╛ рд╣реИ:

  • рдкрд╣рдЪрд╛рди: рдЗрдВрдЬрди foreign key рдЗрдВрдбреЗрдХреНрд╕ рджреЗрдЦрддрд╛ рд╣реИ рддрд╛рдХрд┐ child рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдореЗрдВ рд╡реЗ рд╕рднреА рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдорд┐рд▓реЗрдВ рдЬреЛ рд╣рдЯрд╛рдИ рдЬрд╛ рд░рд╣реА ID рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИрдВред
  • рдирд┐рд╖реНрдкрд╛рджрди: parent рдкрдВрдХреНрддрд┐ рдХреЛ рд╣рдЯрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ (рдпрд╛ рдЙрд╕рдХреЗ рджреМрд░рд╛рди), рдЗрдВрдЬрди рдкрд╣рдЪрд╛рдиреА рдЧрдИ child рдкрдВрдХреНрддрд┐рдпрд╛рдБ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИред
  • рд╕рддреНрдпрд╛рдкрди: рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рднреА orphan рдкрдВрдХреНрддрд┐ рди рдмрдЪреЗред рдпрджрд┐ рд╕рднреА deletes рд╕рдлрд▓ рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рдЯреНрд░рд╛рдВрдЬрд╝реИрдХреНрд╢рди рдХреЛ рдЕрдВрддрд┐рдо рд░реВрдк рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдКрдкрд░ рджреА рдЧрдИ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рддрднреА рд╣реЛрдЧреА рдЬрдм рдЖрдкрдиреЗ constraint ON DELETE CASCADE рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рд╣реЛ, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рдЖрдЧреЗ рд▓реЗрдЦ рдореЗрдВ рджреЗрдЦреЗрдВрдЧреЗред

ON DELETE CASCADE рдмрдирд╛рдо рдЕрдиреНрдп Delete рдирд┐рдпрдо

SQL рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ DELETE рдирд┐рдпрдо рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рдмрддрд╛рддреЗ рд╣реИрдВ рдХрд┐ рд╡рд┐рднрд┐рдиреНрди рддрд╛рд▓рд┐рдХрд╛рдУрдВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдбреЗрдЯрд╛ рдХреЛ рдХреИрд╕реЗ рд╕рдВрднрд╛рд▓рдирд╛ рд╣реИред рдЗрд╕ рдЦрдВрдб рдореЗрдВ, рд╣рдо ON DELETE CASCADE рдХреА рддреБрд▓рдирд╛ рдЗрди constraints рд╕реЗ рдХрд░реЗрдВрдЧреЗред

CASCADE рдмрдирд╛рдо RESTRICT

рдКрдкрд░ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рд╕реЗ, рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ CASCADE parent рдкрдВрдХреНрддрд┐ рд╣рдЯрдиреЗ рдкрд░ рд╕рднреА рдирд┐рд░реНрднрд░ child рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдЕрдкрдиреЗ-рдЖрдк рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдХреЛрдИ рдЕрдирд╛рде рд░рд┐рдХреЙрд░реНрдб рдирд╣реАрдВ рдмрдЪрддрд╛ред

рд╣рд╛рд▓рд╛рдБрдХрд┐, SQL рдХрд╛ RESTRICT constraint delete рдСрдкрд░реЗрд╢рди рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдмреНрд▓реЙрдХ рдХрд░ рджреЗрддрд╛ рд╣реИ рдпрджрд┐ рдХреЛрдИ child рдкрдВрдХреНрддрд┐ рдЕрдм рднреА parent рдкрдВрдХреНрддрд┐ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддреА рд╣реИред рдпрд╣ рдХреНрд░рд┐рдпрд╛ рдЖрдХрд╕реНрдорд┐рдХ рдбреЗрдЯрд╛ рд╣рд╛рдирд┐ рд╕реЗ рдмрдЪрд╛рддреА рд╣реИред рдиреАрдЪреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, RESTRICT constraint рдХрд┐рд╕реА рдЧреНрд░рд╛рд╣рдХ рдХреЛ рд╣рдЯрд╛рдиреЗ рд╕реЗ рд░реЛрдХрддрд╛ рд╣реИ рдпрджрд┐ рдРрд╕реЗ рдХреЛрдИ рдСрд░реНрдбрд░ рдореМрдЬреВрдж рд╣реИрдВ рдЬреЛ рдЙрд╕ рдЧреНрд░рд╛рд╣рдХ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддреЗ рд╣реИрдВред

-- Parent table
CREATE TABLE customers (
    customer_id INT PRIMARY KEY,
    name VARCHAR(100)
);

-- Child table with ON DELETE RESTRICT
CREATE TABLE orders (
    order_id INT PRIMARY KEY,
    customer_id INT,
    CONSTRAINT fk_orders_customers
        FOREIGN KEY (customer_id)
        REFERENCES customers(customer_id)
        ON DELETE RESTRICT
);

CASCADE рдмрдирд╛рдо SET NULL рдФрд░ SET DEFAULT

рдЬрд╣рд╛рдБ CASCADE рдирд┐рд░реНрднрд░ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИ, рд╡рд╣реАрдВ SET NULL рдФрд░ SET DEFAULT child рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдирд┐рдореНрди рддрд░реАрдХреЛрдВ рд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рд░рдЦрддреЗ рд╣реИрдВ:

рдЬрдм рдЖрдк constraint рдХреЛ ON DELETE SET NULL рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ parent рдкрдВрдХреНрддрд┐ рд╣рдЯ рдЬрд╛рддреА рд╣реИ, рд▓реЗрдХрд┐рди child рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ foreign key рдорд╛рди NULL рдХрд░ рджрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред

рдиреАрдЪреЗ рджрд┐рдП рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдХрд┐рд╕реА рдЧреНрд░рд╛рд╣рдХ рдХреЛ рд╣рдЯрд╛рдиреЗ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдСрд░реНрдбрд░реНрд╕ рдирд╣реАрдВ рд╣рдЯрддреЗред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, orders рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ customer_id рдХреЙрд▓рдо рдЕрдкрдиреЗ-рдЖрдк NULL рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдСрд░реНрдбрд░ рд░рд┐рдХреЙрд░реНрдбреНрд╕ рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░рдЦрддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рд╣рдЯрд╛рдП рдЧрдП рдЧреНрд░рд╛рд╣рдХ рд╕реЗ рд╕рдВрдмрдВрдз рддреЛрдбрд╝ рджреЗрддрд╛ рд╣реИред

-- Child table using ON DELETE SET NULL
CREATE TABLE orders (
    order_id INT PRIMARY KEY,
    customer_id INT NULL,
    CONSTRAINT fk_orders_customers
        FOREIGN KEY (customer_id)
        REFERENCES customers(customer_id)
        ON DELETE SET NULL
);

рдЗрд╕реА рддрд░рд╣, SET DEFAULT рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рд╛рде, рдЧреНрд░рд╛рд╣рдХ рдХреЛ рд╣рдЯрд╛рдиреЗ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдСрд░реНрдбрд░реНрд╕ рдирд╣реАрдВ рд╣рдЯрддреЗред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, orders рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ customer_id рдХреЛ рдЙрд╕рдХреЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рдкрд░ рд░реАрд╕реЗрдЯ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рд╕реЗ рдСрд░реНрдбрд░ рд░рд┐рдХреЙрд░реНрдб рд╕реБрд░рдХреНрд╖рд┐рдд рд░рд╣рддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдПрдХ рдкреВрд░реНрд╡рдирд┐рдпрдд placeholder рд╕реМрдВрдк рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

-- Child table using ON DELETE SET DEFAULT
CREATE TABLE orders (
    order_id INT PRIMARY KEY,
    customer_id INT DEFAULT 0,
    CONSTRAINT fk_orders_customers
        FOREIGN KEY (customer_id)
        REFERENCES customers(customer_id)
        ON DELETE SET DEFAULT
);

ON DELETE CASCADE рдХреЗ рд╕рд╛рде Foreign Keys рдмрдирд╛рдирд╛

SQL рдореЗрдВ ON DELETE RESTRICT constraint рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЗрд╕реЗ parent рдФрд░ child рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЗ рдмреАрдЪ foreign key рд╕рдВрдмрдВрдз рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╕рдордп рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

Table schemas рдореЗрдВ CASCADE

рдЖрдк ON DELETE CASCADE рдирд┐рдпрдо рдХреЛ SQL рдореЗрдВ рдпрд╛ рддреЛ рддрд╛рд▓рд┐рдХрд╛рдПрдБ рдмрдирд╛рддреЗ рд╕рдордп, рдпрд╛ рдореМрдЬреВрджрд╛ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдХреЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдиреАрдЪреЗ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдирдИ рддрд╛рд▓рд┐рдХрд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╕рдордп SQL ON DELETE CASCADE foreign key constraint рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд░реЗрдВред CASCADE рдХреЗ рд╕рд╛рде, рдХрд┐рд╕реА рд╡рд┐рднрд╛рдЧ рдХреЛ рд╣рдЯрд╛рдиреЗ рдкрд░ рдЙрд╕ рд╡рд┐рднрд╛рдЧ рд╕реЗ рдЬреБрдбрд╝реЗ рд╕рднреА рдХрд░реНрдордЪрд╛рд░рд┐рдпреЛрдВ рдХреЛ рдЕрдкрдиреЗ-рдЖрдк рд╣рдЯрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

-- Stores department details
CREATE TABLE departments (
    department_id INT PRIMARY KEY, 
    department_name VARCHAR(100)
);

-- Automatically deletes employees when their department is deleted
CREATE TABLE employees (
    employee_id INT PRIMARY KEY,      -- Unique employee identifier
    department_id INT, 
    CONSTRAINT fk_employees_departments
        FOREIGN KEY (department_id)
        REFERENCES departments(department_id)
        ON DELETE CASCADE
);

рдпрджрд┐ рддрд╛рд▓рд┐рдХрд╛ рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рд╣реИ, рддреЛ рдЖрдк ON DELETE CASCADE рдХреЗ рд╕рд╛рде foreign key constraint рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдпрджрд┐ рдЖрдк рдХреЛрдИ рд╡рд┐рднрд╛рдЧ рд╣рдЯрд╛рддреЗ рд╣реИрдВ, рддреЛ рдЙрд╕рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╕рднреА рдХрд░реНрдордЪрд╛рд░реА рд░рд┐рдХреЙрд░реНрдб рдЕрдкрдиреЗ-рдЖрдк рд╣рдЯрд╛ рджрд┐рдП рдЬрд╛рдПрдБрдЧреЗред

-- Adds a foreign key constraint after the table already exists
ALTER TABLE employees
ADD CONSTRAINT fk_employees_departments
FOREIGN KEY (department_id)
REFERENCES departments(department_id)
ON DELETE CASCADE;    -- Deletes employees when the related department is deleted

Cascading chains рдФрд░ рдмрд╣реБ-рд╕реНрддрд░реАрдп deletes

CASCADE рдХреА рдПрдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд╡рд┐рд╢реЗрд╖рддрд╛ рдпрд╣ рд╣реИ рдХрд┐ deletes рдХреЗрд╡рд▓ рдПрдХ рд╕рдВрдмрдВрдз рдкрд░ рдирд╣реАрдВ рд░реБрдХрддреЗред рдпрджрд┐ рдХреЛрдИ child рддрд╛рд▓рд┐рдХрд╛ рдХрд┐рд╕реА рджреВрд╕рд░реА рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рд▓рд┐рдП рднреА parent рд╣реИ, рддреЛ delete рдХрдИ рд╕реНрддрд░реЛрдВ рддрдХ рдлреИрд▓ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ cascading chains рдХрд╣рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрд┐рд╕реА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╣рдЯрд╛рдиреЗ рд╕реЗ рдСрд░реНрдбрд░реНрд╕ рд╣рдЯ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдлрд┐рд░ рдСрд░реНрдбрд░ рдЖрдЗрдЯрдореНрд╕ рд╣рдЯрд╛рддреЗ рд╣реИрдВ, рдЬреЛ рд╕рдВрдмрдВрдзрд┐рдд рдСрдбрд┐рдЯ рдкрдВрдХреНрддрд┐рдпрд╛рдБ рднреА рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВред

рдЗрд╕рд▓рд┐рдП, рдЬрд┐рди schemas рдореЗрдВ CASCADE рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣реЛрддрд╛ рд╣реИ, рдЙрдиреНрд╣реЗрдВ рдкреНрд░рд▓реЗрдЦрд┐рдд рдХрд░рдирд╛ рдФрд░ рд╕рд╛рд╡рдзрд╛рдиреА рд╕реЗ рд╕рдореАрдХреНрд╖рд╛ рдХрд░рдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдЪреВрдБрдХрд┐ рдПрдХ рд╣реА delete рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХрдИ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ, cascading рд╡реНрдпрд╡рд╣рд╛рд░ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рдкреВрд░реА рдирд┐рд░реНрднрд░рддрд╛ рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╕рдордЭ рд▓реЗрдиреА рдЪрд╛рд╣рд┐рдПред

ON DELETE CASCADE рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рдЙрдкрдпреЛрдЧ

SQL рдореЗрдВ ON DELETE CASCADE constraint рдЙрди рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдЬрд╣рд╛рдБ child рддрд╛рд▓рд┐рдХрд╛ рдХрд╛ рдбреЗрдЯрд╛ parent рд░рд┐рдХреЙрд░реНрдб рдХреЗ рдмрд┐рдирд╛ рдХреЛрдИ рдорд╣рддреНрд╡ рдирд╣реАрдВ рд░рдЦрддрд╛ред рдЖрдЗрдП рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдХреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдкреНрд░рдмрдВрдзрди рдореЗрдВ рдЗрд╕рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рджреЗрдЦреЗрдВред

рдирд┐рд░реНрднрд░ рдбреЗрдЯрд╛ рдХреЛ рдЕрдкрдиреЗ-рдЖрдк рд╕рд╛рдл рдХрд░рдирд╛

рдЖрдк ON DELETE CASCADE рдХрд╛ рдЙрдкрдпреЛрдЧ рдРрд╕реЗ рдбреЗрдЯрд╛ рдХреА рд╕рдлрд╛рдИ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд╣рд╛рдБ рдореИрдиреНрдпреБрдЕрд▓ рдХреНрд▓реАрдирдЕрдк рдЕрдХреНрд╖рдо рд╣реЛрдЧрд╛ред рдЗрдирдореЗрдВ logs, history records, audit trails, рдпрд╛ many-to-many join рддрд╛рд▓рд┐рдХрд╛рдПрдБ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдЬреЛ рдЕрдХреНрд╕рд░ рдХреЗрд╡рд▓ рдХрд┐рд╕реА parent рд░рд┐рдХреЙрд░реНрдб рдХреЛ рд╕рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореМрдЬреВрдж рд╣реЛрддреА рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг:

  • рдХрд┐рд╕реА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╣рдЯрд╛рдиреЗ рдкрд░ рдЙрд╕рдХрд╛ рд▓реЙрдЧрд┐рди рдЗрддрд┐рд╣рд╛рд╕ рд╣рдЯ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП
  • рдХрд┐рд╕реА рдСрд░реНрдбрд░ рдХреЛ рд╣рдЯрд╛рдиреЗ рдкрд░ рдЙрд╕рдХреЗ рдСрд░реНрдбрд░ рдЖрдЗрдЯрдореНрд╕ рд╣рдЯ рдЬрд╛рдиреЗ рдЪрд╛рд╣рд┐рдП
  • рдХрд┐рд╕реА рдЙрддреНрдкрд╛рдж рдХреЛ рд╣рдЯрд╛рдиреЗ рдкрд░ product-category mapping рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпрд╛рдБ рд╣рдЯ рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдП

рдбреЗрдЯрд╛ рд▓рд╛рдЗрдлрд╝рд╕рд╛рдЗрдХрд▓ рдкреНрд░рдмрдВрдзрди рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдирд╛

рдЖрдк CASCADE рдХрд╛ рдЙрдкрдпреЛрдЧ рдбреЗрдЯрд╛ рд▓рд╛рдЗрдлрд╝рд╕рд╛рдЗрдХрд▓ рдирд┐рдпрдореЛрдВ рдХреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛрдб рдкрд░ рдирд┐рд░реНрднрд░ рд╣реЛрдиреЗ рдХреЗ рдмрдЬрд╛рдптАФрдЬреЛ рд╕рдВрдмрдВрдзрд┐рдд рд░рд┐рдХреЙрд░реНрдб рдвреВрдБрдвреЗ, рд╕рд╣реА рдХреНрд░рдо рдореЗрдВ рд╣рдЯрд╛рдП, рдФрд░ edge cases рд╡ рд╡рд┐рдлрд▓рддрд╛рдУрдВ рдХреЛ рд╕рдВрднрд╛рд▓реЗтАФрдбреЗрдЯрд╛рдмреЗрд╕ рдпреЗ рдирд┐рдпрдо рд▓рдЧрд╛рддрд╛рд░ рдФрд░ рдПрдЯреЙрдорд┐рдХ рддрд░реАрдХреЗ рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред

рдЗрд╕ рддрд░рд╣, CASCADE рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ delete рдЪрд╛рд╣реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди, рд╕реНрдХреНрд░рд┐рдкреНрдЯ, рдпрд╛ рдПрдбрдорд┐рди рдХреНрд╡реЗрд░реА рд╕реЗ рдЯреНрд░рд┐рдЧрд░ рд╣реЛтАФрдкрд░рд┐рдгрд╛рдо рд╣рдореЗрд╢рд╛ рдПрдХрд╕рдорд╛рди рд░рд╣реЗред

ON DELETE CASCADE рдХреЗ рдЬреЛрдЦрд┐рдо рдФрд░ рдХрдорд┐рдпрд╛рдБ

рдпрджреНрдпрдкрд┐ ON DELETE CASCADE constraint рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЧрд▓рдд рдЙрдкрдпреЛрдЧ рдкрд░ рдпрд╣ рдЬреЛрдЦрд┐рдорднрд░рд╛ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдХреБрд╢рд▓ CASCADE constraints рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд░рдиреЗ рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рдХрдорд┐рдпреЛрдВ рдХреЛ рд╕рдордЭрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред

рдЖрдХрд╕реНрдорд┐рдХ рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ deletions

CASCADE рдХреЗ рд╕рд╛рде рд╕рдмрд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рдЬреЛрдЦрд┐рдо рдЕрдирдЪрд╛рд╣реЗ рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ deletes рд╣реИрдВред parent рддрд╛рд▓рд┐рдХрд╛ рдкрд░ рдПрдХ рд╣реА DELETE рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдЪреБрдкрдЪрд╛рдк рдХрдИ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдореЗрдВ рд╕реИрдХрдбрд╝реЛрдВ рдпрд╛ рд╣рдЬрд╝рд╛рд░реЛрдВ рд╕рдВрдмрдВрдзрд┐рдд рдкрдВрдХреНрддрд┐рдпрд╛рдБ рд╣рдЯрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдкрдХреЛ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЗ рдмреАрдЪ рд╕рдВрдмрдВрдз рдкреВрд░реА рддрд░рд╣ рд╕рдордЭ рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рдЗрд╕рд╕реЗ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рдбреЗрдЯрд╛ рд╣рд╛рдирд┐ рд╣реЛ рд╕рдХрддреА рд╣реИ рдЬрд┐рд╕рдХреА рднрд░рдкрд╛рдИ рдХрд░рдирд╛ рдХрдард┐рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред┬а

рд╕рд░реНрд╡реЛрддреНрддрдо рдЕрднреНрдпрд╛рд╕ рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдореЗрд╢рд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдк parent рдФрд░ child рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдореЗрдВ foreign keys рдХреЗ рдмреАрдЪ рд╕рдВрдмрдВрдзреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХреЗрдВред рдпрджрд┐ рдЖрдкрдХрд╛ schema рд╕рд╣реА рд╣реИ, рддреЛ рдЖрдк рдЬрд╛рдиреЗрдВрдЧреЗ рдХрд┐ рдПрдХ рд╣реА delete рд╕реЗ рдХрд┐рди рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдкрд░ рдЕрд╕рд░ рдкрдбрд╝реЗрдЧрд╛ред

рдЬрдЯрд┐рд▓ schemas рдореЗрдВ рдЫрд┐рдкреА рдирд┐рд░реНрднрд░рддрд╛рдПрдБ

рдЬреИрд╕реЗ-рдЬреИрд╕реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдмрдврд╝рддреЗ рд╣реИрдВ, рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд foreign keys рдЬреБрдбрд╝рддреЗ рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рд╡рд╛рд╕реНрддрд╡рд┐рдХрддрд╛ рд╕реЗ рдЕрд╕рдВрдЧрдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЪреБрдиреМрддреА рддрдм рдЖрддреА рд╣реИ рдЬрдм рдРрд╕реЗ рдкрд░рд┐рд╡реЗрд╢реЛрдВ рдореЗрдВ CASCADE рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ deletes рдЧрд╣рд░рд╛рдИ рддрдХ рдЬрдореА рдирд┐рд░реНрднрд░рддрд╛ рд╢реГрдВрдЦрд▓рд╛рдУрдВ рдореЗрдВ рдлреИрд▓ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рдирд╕реЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдпрд╛ рдПрдбрдорд┐рдирд┐рд╕реНрдЯреНрд░реЗрдЯрд░реНрд╕ рдЕрдирднрд┐рдЬреНрдЮ рд╣реЛрдВред

рдЕрдкрдиреЗ рдЕрдиреБрднрд╡ рд╕реЗ, рдореИрдВ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реВрдБ рдХрд┐ рдЖрдк CASCADE рдХреЛ рд╕реНрдкрд╖реНрдЯ schema рдкреНрд░рд▓реЗрдЦрди рдФрд░ foreign key рд╕рдВрдмрдВрдзреЛрдВ рдХреА рдирд┐рдпрдорд┐рдд рд╕рдореАрдХреНрд╖рд╛ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝реЗрдВред

Try out our SQL Server for Database Administrators skill track рдпрджрд┐ рдЖрдк рдЕрдкрдиреЗ рдХрд╛рдо рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдбрд┐рдЬрд╝рд╛рдЗрди рдпрд╛ рдореЗрдВрдЯреЗрди рдХрд░рддреЗ рд╣реИрдВред┬а

рдбреЗрдЯрд╛рдмреЗрд╕-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ рдФрд░ рд╡реНрдпрд╡рд╣рд╛рд░

рд╣рд╛рд▓рд╛рдБрдХрд┐ ON DELETE CASCADE рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рд░рд┐рд▓реЗрд╢рдирд▓ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдорд╛рдирдХ рд╣реИ, рдкреНрд░рддреНрдпреЗрдХ рдЗрдВрдЬрди рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рдХреБрдЫ рднрд┐рдиреНрдирддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИред

PostgreSQL, MySQL, рдФрд░ SQL Server рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░

PostgreSQL, MySQL, рдФрд░ SQL Server рд╕рднреА ON DELETE CASCADE рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рд╕рдорд╛рди рддрд░реАрдХреЗ рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЕрдкрд╡рд╛рджреЛрдВ рдХреЗ рд╕рд╛рде:

  • MySQL: CASCADE InnoDB рдХреЗ рд╕рд╛рде рдЕрдЪреНрдЫреА рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди circular cascades рд╕реЗ рдмрдЪрддрд╛ рд╣реИ

  • PostgreSQL: cascading delete рдЪреЗрди рдХреЗ рд╕рд╛рде рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд▓рдЪреАрд▓рд╛ рдФрд░ рдЙрджрд╛рд░

  • SQL Server: рдХрдИ cascade path рдирд┐рдпрдореЛрдВ рдХреЗ рдХрд╛рд░рдг рдЕрдзрд┐рдХ рд╕реБрд░рдХреНрд╖рд┐рдд рд▓реЗрдХрд┐рди рдЕрдзрд┐рдХ рдкреНрд░рддрд┐рдмрдВрдзрд╛рддреНрдордХ

рдЯреНрд░рд╛рдВрдЬрд╝реИрдХреНрд╢рди рд╕реНрдХреЛрдк рдФрд░ рд░реЛрд▓рдмреИрдХ рд╕реБрд░рдХреНрд╖рд╛

Cascading deletes рдЙрд╕реА рдЯреНрд░рд╛рдВрдЬрд╝реИрдХреНрд╢рди рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдореВрд▓ delete рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рд╣реЛрддрд╛ рд╣реИред рдпрджрд┐ рдбреЗрдЯрд╛рдмреЗрд╕ рдХрд┐рд╕реА child рдкрдВрдХреНрддрд┐ рдХреЛ рд╣рдЯрд╛рддреЗ рд╕рдордп рдХрд┐рд╕реА рддреНрд░реБрдЯрд┐ рд╕реЗ рдЯрдХрд░рд╛рддрд╛ рд╣реИ, рддреЛ рдкреВрд░реА рдХреНрд░рд┐рдпрд╛ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддреА рд╣реИред parent рдкрдВрдХреНрддрд┐ рдирд╣реАрдВ рд╣рдЯрддреА, рдФрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣рдЯрд╛рдИ рдЧрдИ child рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдмрд╣рд╛рд▓ рдХрд░ рджреА рдЬрд╛рддреА рд╣реИрдВред

рдпрд╣ рдЯреНрд░рд╛рдВрдЬрд╝реИрдХреНрд╢рдирд▓ рд╡реНрдпрд╡рд╣рд╛рд░ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕реБрд░рдХреНрд╖рд╛ рдЬрд╛рд▓ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдЖрдкрдХреЛ commit рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ cascading deletes рдХрд╛ рдкрд░реАрдХреНрд╖рдг, рд╕рдореАрдХреНрд╖рд╛, рдпрд╛ рдЙрд▓рдЯрдирд╛ рд╕рдВрднрд╡ рдмрдирд╛рддрд╛ рд╣реИред

рд╕рд╣реА ON DELETE рд░рдгрдиреАрддрд┐ рдЪреБрдирдирд╛

рдЕрдм рддрдХ, рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╕рд╣реА delete рд░рдгрдиреАрддрд┐ рдЪреБрдирдирд╛ рдЗрд╕ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХрд╛ рдбреЗрдЯрд╛ рдХреИрд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ рдФрд░ рд╕рдордп рдХреЗ рд╕рд╛рде рдЙрд╕рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреИрд╕рд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЕрдкрдиреЗ schema рдХреЗ рд▓рд┐рдП рд╕рд╣реА DELETE рд╡рд┐рдХрд▓реНрдк рдЪреБрдирдиреЗ рд╣реЗрддреБ рдирд┐рдореНрди рджрд┐рд╢рд╛рдирд┐рд░реНрджреЗрд╢реЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред

рдЬрдм CASCADE рд╕рд╣реА рд╡рд┐рдХрд▓реНрдк рд╣реЛ

рдЖрдкрдХреЛ ON DELETE CASCADE constraint рддрдм рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрдм child рдбреЗрдЯрд╛ рдХрд╛ рдЕрд░реНрде рдпрд╛ рдЕрд╕реНрддрд┐рддреНрд╡ рдкреВрд░реА рддрд░рд╣ parent рдкрд░ рдирд┐рд░реНрднрд░ рд╣реЛред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рдЗрд╕реЗ рдирд┐рдореНрди рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

  • many-to-many рд╕рдВрдмрдВрдзреЛрдВ рдореЗрдВ join рддрд╛рд▓рд┐рдХрд╛рдПрдБ
  • рдЕрд╕реНрдерд╛рдпреА рдпрд╛ рд╡реНрдпреБрддреНрдкрдиреНрди рдбреЗрдЯрд╛, рдЬреИрд╕реЗ logs рдпрд╛ history рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпрд╛рдБ

рдЙрдкрд░реНрдпреБрдХреНрдд рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рд╕реНрд╡рдд: рдХреНрд▓реАрдирдЕрдк рд╕реНрдерд┐рд░рддрд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЗрдпрд░ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдореИрдиреНрдпреБрдЕрд▓ delete рд▓реЙрдЬрд┐рдХ рдХреЛ рдШрдЯрд╛рддрд╛ рд╣реИред

рдореИрдВ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реВрдБ рд╣рдорд╛рд░рд╛ Joining Data in SQL рдХреЛрд░реНрд╕ рд▓реЗрдВ рддрд╛рдХрд┐ рдЖрдк SQL рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреНрд░рдХрд╛рд░ рдХреЗ joins рдФрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рд╕рдВрдмрдВрдзрд┐рдд рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╕реАрдЦ рд╕рдХреЗрдВред

CASCADE рд╕реЗ рдХрдм рдмрдЪреЗрдВ

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрджрд┐ child рдбреЗрдЯрд╛ рдХрд╛ рд╕реНрд╡рддрдВрддреНрд░ рдорд╣рддреНрд╡ рд╣реИ рдпрд╛ рдЙрд╕реЗ рдХрд╛рдиреВрдиреА, рдСрдбрд┐рдЯрд┐рдВрдЧ, рдпрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдгрд╛рддреНрдордХ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реБрд░рдХреНрд╖рд┐рдд рд░рдЦрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рддреЛ рдЕрдкрдиреЗ schema рдореЗрдВ ON DELETE CASCADE constraint рд╕реЗ рдмрдЪрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк CASCADE рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрдирдореЗрдВ рди рдХрд░реЗрдВ:

  • рд╡рд┐рддреНрддреАрдп рд░рд┐рдХреЙрд░реНрдбреНрд╕ рдФрд░ рдЪрд╛рд▓рд╛рди
  • рдСрдбрд┐рдЯ рд▓реЙрдЧреНрд╕ рдФрд░ рдЕрдиреБрдкрд╛рд▓рди рдбреЗрдЯрд╛, рдЬреИрд╕реЗ рд╕реНрд╡рд╛рд╕реНрдереНрдп-рд╕реЗрд╡рд╛ рдбреЗрдЯрд╛

рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдореИрдВ RESTRICT, SET NULL рдЬреИрд╕реЗ рдкреНрд░рддрд┐рдмрдВрдзрд╛рддреНрдордХ рдирд┐рдпрдореЛрдВ рдпрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди-рдкреНрд░рдмрдВрдзрд┐рдд deletes рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдБ рддрд╛рдХрд┐ рдЕрдзрд┐рдХ рдирд┐рдпрдВрддреНрд░рдг рдФрд░ рджреГрд╢реНрдпрддрд╛ рдорд┐рд▓ рд╕рдХреЗред

рдирд┐рд╖реНрдХрд░реНрд╖

SQL рдХрд╛ ON DELETE CASCADE constraint рдПрдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд╕реНрд╡рдЪрд╛рд▓рди рдЙрдкрдХрд░рдг рд╣реИ рдЬреЛ parent рдкрдВрдХреНрддрд┐ рд╣рдЯрдиреЗ рдкрд░ рдирд┐рд░реНрднрд░ рдбреЗрдЯрд╛ рдХреЛ рдЕрдкрдиреЗ-рдЖрдк рд╣рдЯрд╛рдХрд░ referential integrity рдмрдирд╛рдП рд░рдЦрддрд╛ рд╣реИред рдЙрдЪрд┐рдд рдЙрдкрдпреЛрдЧ рдкрд░, рдпрд╣ рдХреНрд▓реАрдирдЕрдк рдХреЛ рд╕рд░рд▓ рдмрдирд╛рддрд╛ рд╣реИ, рдореИрдиреНрдпреБрдЕрд▓ delete рд▓реЙрдЬрд┐рдХ рдХрдо рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рдиреНрд╕ рд╡ рд╕реНрдХреНрд░рд┐рдкреНрдЯреНрд╕ рдореЗрдВ рдПрдХрд╕рдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИред рдЕрдирдЪрд╛рд╣реЗ deletions рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдк рдбреЗрдЯрд╛рдмреЗрд╕ schema рдореЗрдВ рд╕рдВрдмрдВрдзреЛрдВ рдХреЛ рдкреВрд░реНрдгрддрдГ рдирд╣реАрдВ рд╕рдордЭрддреЗ рд╣реИрдВ рддреЛ CASCADE рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рд╣рдореЗрд╢рд╛ рд╕рддрд░реНрдХ рд░рд╣реЗрдВред

рдореИрдВ рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдБ рдХрд┐ рд╣рдорд╛рд░рд╛ Database Design рдХреЛрд░реНрд╕ рдХрд░реЗрдВ, рдЬрд╣рд╛рдБ рдЖрдк рдбреЗрдЯрд╛рдмреЗрд╕ рдмрдирд╛рдирд╛ рдФрд░ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдирд╛ рддрдерд╛ рдЕрдкрдиреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рдЕрдиреБрд░реВрдк рдЙрдЪрд┐рдд DBMS рдЪреБрдирдирд╛ рд╕реАрдЦреЗрдВрдЧреЗред рдореИрдВ рдпрд╣ рднреА рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реВрдБ рдХрд┐ рд╣рдорд╛рд░рд╛ Associate Data Engineer in SQL рдХрд░рд┐рдпрд░ рдЯреНрд░реИрдХ рдЖрдЬрд╝рдорд╛рдПрдБ рддрд╛рдХрд┐ рдЖрдк рдбреЗрдЯрд╛ рдЗрдВрдЬреАрдирд┐рдпрд░рд┐рдВрдЧ рдФрд░ рдбреЗрдЯрд╛ рд╡реЗрдпрд░рд╣рд╛рдЙрд╕рд┐рдВрдЧ рдХреА рдореВрд▓ рдмрд╛рддреЗрдВ рд╕реАрдЦ рд╕рдХреЗрдВред┬а┬а

Allan Ouko

рд▓реЗрдЦрдХ

Allan Ouko

рдбреЗрдЯрд╛ рдПрдирд╛рд▓рд┐рдЯрд┐рдХреНрд╕, рдмрд┐рдЬрд╝рдиреЗрд╕ рдЗрдВрдЯреЗрд▓рд┐рдЬреЗрдВрд╕ рдФрд░ рдбреЗрдЯрд╛ рд╕рд╛рдЗрдВрд╕ рдореЗрдВ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЕрдиреБрднрд╡ рд░рдЦрдиреЗ рд╡рд╛рд▓рд╛ рдбреЗрдЯрд╛ рд╕рд╛рдЗрдВрд╕ рддрдХрдиреАрдХреА рд▓реЗрдЦрдХред рдореИрдВ SQL, Python, Power BI, Databricks рдФрд░ рдбреЗрдЯрд╛ рдЗрдВрдЬреАрдирд┐рдпрд░рд┐рдВрдЧ рдкрд░ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ, рдЙрджреНрдпреЛрдЧ-рдХреЗрдВрджреНрд░рд┐рдд рд╕рд╛рдордЧреНрд░реА рд▓рд┐рдЦрддрд╛/рд▓рд┐рдЦрддреА рд╣реВрдБ, рдЬреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдХреА рдПрдирд╛рд▓рд┐рдЯрд┐рдХреНрд╕ рдХрд╛рд░реНрдп рд╕реЗ рдЬреБрдбрд╝реА рд╣реЛрддреА рд╣реИред рдореЗрд░реА рд▓реЗрдЦрдиреА рддрдХрдиреАрдХреА рдЧрд╣рд░рд╛рдИ рдФрд░ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдкреНрд░рднрд╛рд╡ рдХреЗ рдмреАрдЪ рдкреБрд▓ рдХрд╛ рдХрд╛рдо рдХрд░рддреА рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдкреЗрд╢реЗрд╡рд░реЛрдВ рдХреЛ рдбреЗрдЯрд╛ рдХреЛ рдЖрддреНрдорд╡рд┐рд╢реНрд╡рд╛рд╕рдкреВрд░реНрдг рдирд┐рд░реНрдгрдпреЛрдВ рдореЗрдВ рдмрджрд▓рдиреЗ рдореЗрдВ рдорджрдж рдорд┐рд▓рддреА рд╣реИ.┬а

SQL ON DELETE CASCADE FAQs

ON DELETE CASCADE рдкрд╣рд▓реЗ child рдкрдВрдХреНрддрд┐рдпрд╛рдБ рд╣рдЯрд╛рддрд╛ рд╣реИ рдпрд╛ parent рдкрдВрдХреНрддрд┐рдпрд╛рдБ?

ON DELETE CASCADE referential integrity рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ child рдкрдВрдХреНрддрд┐рдпрд╛рдБ рд╣рдЯрд╛рддрд╛ рд╣реИред

ON DELETE CASCADE, RESTRICT рд╕реЗ рдХреИрд╕реЗ рдЕрд▓рдЧ рд╣реИ?

CASCADE рдирд┐рд░реНрднрд░ рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдЕрдкрдиреЗ-рдЖрдк рд╣рдЯрд╛рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ RESTRICT child рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдореМрдЬреВрдж рд╣реЛрдиреЗ рдкрд░ delete рдХреЛ рд░реЛрдХ рджреЗрддрд╛ рд╣реИред

ON DELETE CASCADE, SET NULL рд╕реЗ рдХреИрд╕реЗ рдЕрд▓рдЧ рд╣реИ?

CASCADE child рдкрдВрдХреНрддрд┐рдпрд╛рдБ рд╣рдЯрд╛рддрд╛ рд╣реИ; SET NULL рдЙрдиреНрд╣реЗрдВ рд░рдЦрддрд╛ рд╣реИ рд▓реЗрдХрд┐рди foreign key рд╕рдВрджрд░реНрдн рд╕рд╛рдл рдХрд░ рджреЗрддрд╛ рд╣реИред

рдХреНрдпрд╛ ON DELETE CASCADE рдХреЛ рд░реЛрд▓рдмреИрдХ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?

рд╣рд╛рдБ, cascading deletes рдПрдХ рдЯреНрд░рд╛рдВрдЬрд╝реИрдХреНрд╢рди рдХреЗ рднреАрддрд░ рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░ commit рд╕реЗ рдкрд╣рд▓реЗ рд░реЛрд▓рдмреИрдХ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдХреНрдпрд╛ SQL рдореЗрдВ ON DELETE CASCADE рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИ?

рдирд╣реАрдВ, рдЖрдкрдХреЛ рддрд╛рд▓рд┐рдХрд╛ рдмрдирд╛рддреЗ рд╕рдордп рдпрд╛ рдореМрдЬреВрджрд╛ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ foreign key constraint рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ ON DELETE CASCADE рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рд╣реЛрддрд╛ рд╣реИред

рд╡рд┐рд╖рдп