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/