2010-05-05 7 views
3

Je supprime des lignes sélectionnées de la table dans MYSQL, les deux tables ont des clés étrangères. supprime d, b de A comme b jointure interne B comme d sur b.bid = d.bid où b.name comme '% xxxx%';
MYSQL se plaint de clés étrangères, même si je suis en train de supprimer des deux tables:mysql delete et la contrainte de clé étrangère

Erreur: Impossible de supprimer ou mettre à jour une ligne parent: une contrainte de clé étrangère échoue (yyy/d, CONTRAINTE fk_d_bid FOREIGN KEY (bid) RÉFÉRENCES b (bid) SUR SUPPRIMER AUCUNE ACTION SUR MISE À JOUR AUCUNE ACTION)


Quelle est la meilleure solution ici à supprimer de la table?

Répondre

6

Modifiez cette contrainte pour utiliser ON DELETE CASCADE - ce qui signifie que si une ligne est supprimée, toutes les lignes «enfant» seront également supprimées automatiquement.

Bien sûr, prenez bien soin d'utiliser CASCADE - utilisez-le uniquement si nécessaire. Si vous êtes trop zélé avec, et faites accidentellement un DELETE bien placé, il pourrait finir par supprimer la moitié de votre base de données. :)

Voir documentation on foreign key constraints.

0

Je pense que je vois ce que vous essayez de faire

Si vous ne pouvez pas changer la structure de la table, vous pouvez utiliser 2 déclarations, la première avec un sous-select

supprimer B où enchère IN (sélectionnez l'enchère de A où le nom est '% xxxx%');

delete from A où le nom '% xxxx%';

+0

bonne idée, mais j'ai obtenu Vous ne pouvez pas spécifier la table cible 'B' pour la mise à jour dans la clause FROM – user121196

Questions connexes