3

Je crée un système de gestion des contacts qui enregistre les coordonnées d'une entreprise, la personne à contacter, la campagne, les propositions soumises par l'entreprise et le don.SQL Supprimer vs Cascade

Une entreprise peut avoir beaucoup de contacts, peut soumettre de nombreuses propositions dans de nombreuses campagnes et peut faire un don pour de nombreuses campagnes. Il n'est pas obligatoire pour une entreprise d'avoir une personne de contact, de soumettre une proposition et de faire un don. J'ai réussi à faire des requêtes en utilisant INSERT, UPDATE et SELECT mais pas DELETE. En ce moment, j'utilise cette requête pour supprimer une entreprise et toutes ses données associées:

DELETE organizations.*, contactdetails.*, proposalorg.*, donationorg.* 
FROM organizations, contactdetails, proposalorg, donationorg 
WHERE idOrg='$id' AND 
contactdetails.company_id=organizations.idOrg AND 
proposalorg.company_id=organizations.idOrg AND 
donationorg.company_id=organizations.idOrg 

Je sais que ce ne supprimera pas l'entreprise s'il y a des erreurs avec cette requête. J'ai lu sur DELETE CASCADE comme une meilleure option, mais je ne suis pas sûr de savoir comment le faire. Si quelqu'un a une idée sur la façon de le faire, je l'apprécierais vraiment.

Répondre

2

Pour utiliser cascade supprime, vous devez avoir les clés étrangères entre les tables. Vous définissez la suppression en cascade règle lors de la définition de la clé étrangère, comme ceci:

ALTER TABLE contactdetails ADD 
CONSTRAINT FK_contactdetails_company_id FOREIGN KEY (company_id) 
REFERENCES organizations (idOrg) 
ON DELETE CASCADE 

Cela indiquerait au db que lorsqu'une ligne est supprimée de la table des organisations, s'il y a des lignes ContactDetails qui y font référence , ceux-ci devraient également être supprimés. Quant à savoir si c'est une bonne idée ou pas - c'est une question d'opinion. Personnellement, je n'aime pas les utiliser car il est trop facile d'effacer accidentellement beaucoup de données que vous n'aviez peut-être pas l'intention de supprimer. Mais d'autres ne seront pas d'accord, j'en suis sûr.

+0

Merci, @Eric Petreolje! Merci pour vos conseils. J'en apprendrai plus sur d'autres requêtes DELETE la prochaine fois mais cette fois je vais utiliser DELETE CASCADE. Puisque le système a la fonction «exporter vers Excel», je ne pense pas que cela devrait être un gros problème de suppression de données. Merci encore! – mella

0

Vous utilisez "on delete cascade" avec une contrainte de clé étrangère. Une contrainte de clé étrangère est généralement placée sur les identifiants étrangers, ce sont les identifiants que vous utilisez pour vous connecter sur plusieurs tables. Lorsque vous utilisez des contraintes de clé étrangère avec cascade, vous supprimez uniquement de la table principale et n'utilisez pas de jointures de table, comme dans votre exemple. Pouvez-vous montrer les parties importantes de la définition de votre structure de table?

Voir http://dev.mysql.com/doc/refman/5.1/en/innodb-foreign-key-constraints.html

+0

Oui @Adder, J'utilise DELETE CASCADE et je viens de l'essayer et ça marche! Merci de passer votre temps pour moi. – mella