こんにちは私はmysql5innoDBデータベースを使用しています。親行とそれに関連する子テーブルのデータからデータを強制的に削除したい。どうやってやるの。誰でも私を助けることができます。
3 に答える
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テーブルでのみ機能します。
続けて2回削除すると、次のようになります。
delete from ChildTable where ParentID = ?
delete from ParentTable where ID = ?
外部キー制約を使用している場合は、子テーブルの作成中にカスケード句の削除に使用して、親テーブルから行を削除すると、対応する主キー行も子テーブルから削除されます。
親テーブルからのみ行を削除し、子テーブルから対応する主キー行を削除しない場合は、子テーブルの作成中にカスケード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)のみが削除されます。
:) :) :) :) :) :) :) :) :) :)