質問内容
下記のように1:nの関係にあるテーブルが複数の階層を作っていたとします。
ここでparent_id=1
に関連するデータを全て削除したい場合、
処理の流れとしてはどちらが一般的なのでしょうか?
- 上の階層から順に削除する(親→子→孫)
- 下の階層から順に削除すう(孫→子→親)
前提として
- 1テーブルずつ削除処理を行います
- 各テーブルに対して、レコードの存在チェック→削除の順に処理を行います
(メモリ上に子レコードを引くための親レコード情報は保持されている)
- 削除処理自体を1つのトランザクションとして処理します
(途中でエラーが起きた場合は全てのテーブルがロールバックされる)
今まで何となく一番下のテーブルから削除していたのですが、
よくよく考えたらトランザクション制御をしているので
どっちから消しても同じなのでは?と困り、こちらに質問させていただきました。
「こうする方が〇〇の面から一般的」や「こちらのやり方には△△というメリット(デメリット)がある」など
ありましたら、ご教示いただけますと幸いです。
テーブル構造の例
・親テーブル
parent_id | name |
---|---|
1 | aaa |
2 | bbb |
・子テーブル
child_id | parent_id | value |
---|---|---|
1 | 1 | 111 |
2 | 1 | 222 |
3 | 2 | 333 |
・孫テーブル1
grandchild_id1 | child_id | text |
---|---|---|
1 | 1 | あいうえお |
2 | 1 | かきくけこ |
3 | 3 | さしすせそ |
・孫テーブル2
grandchild_id2 | child_id | url |
---|---|---|
1 | 2 | https://hoge.com |
2 | 3 | https://moga.com |
3 | 3 | https://fugo.com |
補足情報(FW/ツールのバージョンなど)
MySQL 5.6での処理を想定しています。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/15 03:59