2017-08-08 7 views
1

データベースにフォルダとファイルシステムを作成しようとしています。前の行のIDを使用中に複数の行を削除する

をサブフォルダで削除している間は、フォルダ内の対応するファイルも別のテーブル(files_plus)から削除する必要があります。しかし、私はどのようにフォルダ、サブフォルダとフォルダとサブフォルダに含まれているすべてのファイルの両方を削除できますか?

表:files_plus:

----------------------------- 
| id | name | parentid | 
----------------------------- 

( "のParentID" folders_plusテーブルから "ID" である。)

表:

SQL Table example

folders_plus I「ができそうするためのクエリを作成する方法はないと思うので、どうすればこれを行うことができますか?

答えて

1

folders_plusテーブルの場合と同様に、外部キー制約を追加して「CASCADE DELETE」に設定できます。

ALTER TABLE `folders_plus` 
ADD INDEX `folders_plus_parentid_idx` (`parentid` ASC); 
ALTER TABLE `folders_plus` 
ADD CONSTRAINT `fk_folders_plus_id_folders_plus_parentid` 
    FOREIGN KEY (`parentid`) 
    REFERENCES `folders_plus` (`id`) 
    ON DELETE CASCADE 
    ON UPDATE NO ACTION; 

そしてfiles_plusテーブル用:あなたが親行を削除すると

ALTER TABLE `files_plus` 
ADD INDEX `fk_files_plus_id_folders_plus_parentid_idx` (`parentid` ASC); 
ALTER TABLE `files_plus` 
ADD CONSTRAINT `fk_files_plus_id_folders_plus_parentid` 
    FOREIGN KEY (`parentid`) 
    REFERENCES `folders_plus` (`id`) 
    ON DELETE CASCADE 
    ON UPDATE NO ACTION; 

、それはまた、それの子のすべてを削除します。

parentid列がNULL可能であり、すべての最上位ディレクトリがnullであることを確認してください。ヌルでないすべての親のIDは、folders_plusテーブルにIDとして存在する必要があります。

PS:外部キー制約が機能するためには、database storage engineはInnoDBである必要があります。

0
  1. メイクのユーザーIDと同じタイプ(私はUNSIGNED INT(10)を推測している)
  2. は、NULL値がのParentID = 0
  3. が作成
  4. UPDATEテーブルSETのParentID = NULLをPARENTIDを許可PARENTID親からユーザーIDへの外部キー
  5. 外部キーセット "ON DELETE"を "CASCADE"に作成すると、削除されたparentIDを持つすべてのアイテムも削除されます。
関連する問題