2009-05-14 6 views
3

Salut les gars je suis nouveau à la base de donnéesSuppression d'un enregistrement dans une table qui a des tables relationnelles clés étrangères

ma question est de savoir comment supprimer les enregistrements dans une table qui a une relation clé étrangère suppose que j'ai un employé 2 tables & département qui a deptID comme relation maintenant je veux supprimer une ligne spécifique dans un tableau comme "supprimer du département où depID = 10" son ok si les employés du département sont supprimés et je veux également maintenir la relation de clé étrangère. quelqu'un peut me fournir plz requête pour ce faire

Merci

+0

supprimer des employés où depid = 10? –

Répondre

2

Vous devez spécifier que les cascades de suppression à la table employee. Cela dépend un peu de votre base de données, mais presque toutes les bases de données prennent en charge les suppressions en cascade.

Par exemple, dans SQL Server:

CREATE TABLE Employee 
(
    DepId INT NOT NULL REFERENCES Department(DepId) ON DELETE CASCADE 
) 
+0

Faux. Toutes les bases de données ne prennent pas en charge les suppressions en cascade. –

+0

Je ne le savais pas. Lesquels ne le font pas? Tous ceux que je connais font: Oracle, SQL Server, MySQL, PostgreSQL, DB2. Bien sûr, ce sont les principaux. –

+0

Eh bien, MySQL ne supporte que les suppressions en cascade si vous utilisez InnoDB mais cela va de soi puisque MyISAM ne supporte pas du tout les clés étrangères. – Kris

0

Dans SQL Server vous marquer la relation comme Cascase SUPPRIMER

Vous pouvez également exécuter une SUPPR sur la table Les employés d'abord, puis une seconde SUPPRIMER contre la Table des départements.

1

Cela dépend de la base de données et de la façon dont vous avez défini vos relations. Vous pouvez provoquer la cascade des suppressions, ce qui signifie que la suppression d'un parent supprime les enregistrements enfants ou "supprime nullify", ce qui entraîne des valeurs NULL dans les champs FK des relations enfants, ou autres. Cela dépend de vos besoins. En règle générale, je ne définis pas NULLIFY ou CASCADE et supprime chaque enregistrement si nécessaire sans que cela soit pris en charge automatiquement.

0

Lorsque vous établissez la relation de clé étrangère, vous pouvez définir (dans MS SQL Server, de toute façon) les actions à effectuer lors de la mise à jour et de la suppression. Par exemple, vous pouvez dire "lorsqu'un enregistrement dans le département est supprimé, cascade la suppression à toutes les tables enfants qui le référencent". Vous pouvez trouver plus d'informations here.

0

syntaxe DB2 (puisque vous n'avez pas spécifié que DB est utilisé):

Create table Employee 
... 
... 
FOREIGN KEY (deptID) REFERENCES department (deptID) 
    ON DELETE CASCADE 

Si vous spécifiez l'option CASCADE, les employés seront supprimés si le département est supprimé. Si au lieu de CASCADE, vous spécifiez RESTRICT, vous ne pourrez pas supprimer le service, sauf si tous les employés appartenant au service sont supprimés en premier.

Sinon, si vous ne voulez pas que cela se produise à chaque fois, puis de son mieux pour spécifier Réglementer et faire une suppression d'abord sur emp où REQUISES

Delete * from Employee where deptID = 10; 
Delete * from Dept where deptID = 10; 

Voici un lien vers examples

Questions connexes