Rayne Varga
Legacy Member
Ik heb een tabel 'categorie' met de volgende velden:
- id (primary key)
- naam
- parent_id
Het is de bedoeling om categoriën met subcategoriën in deze tabel te stoppen,
wat intussen al gelukt is. Het veld parent_id zou moeten verwijzen naar het veld id.
De bedoeling is om later op basis van het veld id een record te verwijderen en dat
automatisch alle subrecords ook verwijderd worden. Dit wou ik doen met de optie
ON DELETE CASCADE die ik kan meegeven bij het leggen van een foreign key.
Nu heb ik het volgende probleem: wanneer ik een foreign key probeer te maken met
de volgende query:
krijg ik deze foutmelding:
Ik heb ook al geprobeerd om eerst een index te leggen op het veld parent_id en
daarna pas de foreign key toe te voegen maar dat geeft hetzelfde resultaat.
Op de site van mysql heb ik het volgende gevonden:
- id (primary key)
- naam
- parent_id
Het is de bedoeling om categoriën met subcategoriën in deze tabel te stoppen,
wat intussen al gelukt is. Het veld parent_id zou moeten verwijzen naar het veld id.
De bedoeling is om later op basis van het veld id een record te verwijderen en dat
automatisch alle subrecords ook verwijderd worden. Dit wou ik doen met de optie
ON DELETE CASCADE die ik kan meegeven bij het leggen van een foreign key.
Nu heb ik het volgende probleem: wanneer ik een foreign key probeer te maken met
de volgende query:
Code:
ALTER TABLE categorie ADD FOREIGN KEY (parent_id) REFERENCES categorie(id) ON DELETE CASCADE
Code:
#1452 - Cannot add or update a child row: a foreign key constraint fails (`stock/#sql-122c_5d`,
CONSTRAINT `#sql-122c_5d_ibfk_1` FOREIGN KEY (`parent_id`) REFERENCES `categorie` (`id`))
daarna pas de foreign key toe te voegen maar dat geeft hetzelfde resultaat.
Op de site van mysql heb ik het volgende gevonden:
Aangezien ik een InnoDB-tabel gebruik veronderstel ik dus dat het toch mogelijk moet zijn.Note that InnoDB supports foreign key references within a table. In these cases, “child table records” really refers to dependent records within the same table.