2011-08-26 3 views

Répondre

6

Si vous utilisez innodb, vous pouvez utiliser des CONTRAINTES de clé étrangère pour la suppression en cascade lorsque vous supprimez la ligne parent, les enfants seront également supprimés.

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

Une autre approche consiste à utiliser la syntaxe multi-tables à supprimer. Regardez http://dev.mysql.com/doc/refman/5.1/en/delete.html

approche finale utilise déclencheur sur après action de suppression. Regardez http://dev.mysql.com/doc/refman/5.1/en/trigger-syntax.html

Vous pouvez également utiliser des instructions de suppression séquentielle, mais dans ce cas, vous devez utiliser transaction. Note: celui-ci ne fonctionne qu'avec les tables innodb.

0

Deux suppressions de suite ferait l'affaire:

delete from ChildTable where ParentID = ? 
delete from ParentTable where ID = ? 
+0

Ceci est l'approche pour tous les moteurs de table qui ne supportent pas 'keys' étranger – ty812

+0

Si un moteur de table ne support des clés étrangères, j'utiliserais un trigger, de cette façon je n'ai pas à y penser. – Johan

0

Si vous utilisez la contrainte de clé étrangère, vous pouvez utiliser suppression en cascade article tout en créant une table enfant pour supprimer une ligne de parent table, il supprimera également la ligne de clé primaire correspondante de la table enfant.

Si vous souhaitez supprimer la ligne uniquement de la table parent et non la ligne de clé primaire correspondante de la table enfant, utilisez lors de la suppression de cascade null Clause lors de la création de la table enfant.

Par exemple: créer une table parent appelé "étudiant", et table enfant appelée "bibliothèque"

create table student(sno integer(5) primary key,sname varchar(20)); 

insert into student values(1,"suman"); 
insert into student values(2,"sai"); 
insert into student values(3,"saaaa"); 

create table library(sno integer(5) references primary key(sno) on delete cascade,book_name varchar(20)); 

insert into student values(1,"c"); 
insert into student values(2,"JAVA"); 
insert into student values(3,"ORACLE"); 

maintenant supprimer la deuxième rangée de table parent

delete from student where sno=2; 

il supprimera la ligne correspondante (2 JAVA) de la table enfant. Parce que vous utilisez la clause "on delete cascade" uniquement. Si vous utilisez delete cascade null, il supprimera uniquement la ligne (2 Sai) de la table parente.

:) :) :) :) :) :) :) :) :) :)

Questions connexes