1

こんにちは私はmysql5innoDBデータベースを使用しています。親行とそれに関連する子テーブルのデータからデータを強制的に削除したい。どうやってやるの。誰でも私を助けることができます。

4

3 に答える 3

6

innodbを使用する場合、親行を削除するときにカスケード削除にFOREIGN KEY CONSTRAINTSを使用すると、子も削除されます。

詳細を参照してくださいhttp://dev.mysql.com/doc/refman/5.1/en/innodb-foreign-key-constraints.html

もう1つのアプローチは、deleteで複数テーブル構文を使用することです。http://dev.mysql.com/doc/refman/5.1/en/delete.htmlを見てください

最後のアプローチは、削除アクションの後にトリガーを使用することです。http://dev.mysql.com/doc/refman/5.1/en/trigger-syntax.htmlを見てください

また、順次削除ステートメントを使用することもできますが、この場合はトランザクションを使用する必要があります。注:これはinnodbテーブルでのみ機能します。

于 2011-08-26T07:38:21.150 に答える
0

続けて2回削除すると、次のようになります。

delete from ChildTable where ParentID = ?
delete from ParentTable where ID = ?
于 2011-08-26T07:41:53.297 に答える
0

外部キー制約を使用している場合は、子テーブルの作成中にカスケード句の削除に使用して、親テーブルから行を削除すると、対応する主キー行も子テーブルから削除されます。

親テーブルからのみ行を削除し、子テーブルから対応する主キー行を削除しない場合は、子テーブルの作成中にカスケードnull句の削除に使用します。

:「student」という親テーブルと「library」という子テーブルを作成します

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");

次に、親テーブルから2番目の行を削除します

delete from student where sno=2;

次に、対応する行(2 JAVA)を子テーブルから削除します。「カスケードの削除時」句のみを使用しているためです。

カスケードnullの削除で使用している場合は、親テーブルから行(2 Sai)のみが削除されます。

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

于 2011-08-26T10:35:08.933 に答える