mysql

Pro bezproblémový chod databáze a udržování přehledného obsahu, je dobré důsledně a efektivně mazat nepotřebné záznamy. Důslednost spočívá v mazání všech souvisejících dat, efektivita spočívá v maximálním zjednodušení způsobu mazání dat. Téměř vždy máte v databázi provázáno několik tabulek podle určitého klíče. Můžete mít například tabulku objednavky a k této tabulce přidruženou tabulku objednavka_items. Při smazání řádku z tabulky objednavky byste měli smazat i všechny související řádky z tabulky objednavka_items. Nemusíte však mazat z obou tabulek zvlášť. Existuje jednoduchý způsob jak zajistit, aby stačilo iniciovat smazání záznamu z tabulky objednavka, přičemž automaticky dojde k odstranění všech souvisejících záznamů i z tabulky objednavka_items.

ON DELETE CASCADE lze použít pouze s InnoDB, nikoliv s MyISAM, protože musí být podporovány cizí klíče (foreign keys).

Přidat podmínku pro mazání lze například pomocí ALTER.

ALTER TABLE objednavky
ADD CONSTRAINT objednavky_ibfk_1 FOREIGN KEY (zakaznik_id) REFERENCES zakaznici (id) ON DELETE CASCADE ON UPDATE NO ACTION;

ALTER TABLE objednavka_items
ADD CONSTRAINT objednavka_items_ibfk_1 FOREIGN KEY (objednavka_id) REFERENCES objednavky (id) ON DELETE CASCADE ON UPDATE NO ACTION;

ibfk je používaná zkratka pro innodb foreign key. Můžete to samozřejmě libovolně přejmenovat.

Více viz. http://www.mysqltutorial.org/mysql-on-delete-cascade/