2011-12-15 9 views
0
+--------+---------+-----------+ 
| id | title | parent_id | 
+--------+---------+-----------+ 
| 1 | Lvl-1 | null | 
+--------+---------+-----------+ 
| 2 | Lvl-11 |  1  | 
+--------+---------+-----------+ 
| 3 | Lvl-111 |  2  | 
+--------+---------+-----------+ 
| 4 | Lvl-12 |  4  | 
+--------+---------+-----------+ 

私がしようとしているのは、id 1の行を削除すると、すべての子行(例の表のid 2と3の行)が削除されます。 ID 2の行は、parent_idが1であり、parent_idが2なので削除する必要があります。隣接リストモデルで親とその子を削除するにはどうすればよいですか?

私はMyISAMエンジンを使用しています。 1つのクエリで行とすべての子行を削除することはできますか?

+0

階層型データに対するSQL操作を容易にするネストセットモデルを確認してください。 –

+0

@ a'rその上の任意のリンクは理解されるでしょう – slier

+0

http://en.wikipedia.org/wiki/Nested_set_model –

答えて

1

いいえ、myISAMではありません。これをInnoDBの制約で設定すると、動作する可能性があります。

しかし、このようにすると、テーブル指向のデータストアを使用して階層データ構造を管理しています。このようなことをアプリケーションプログラムで明示的に処理することは賢明でしょう。

+1

dbmsメカニズムを利用することは、移植性に悪影響を及ぼします。 –

1

DELETE TRIGGER12.1.11. CREATE TRIGGER Syntaxを参照してください)。

トリガーは、イベントをトリガーしている同じテーブルで操作を実行できません。スケジュールされたイベントを使用するか、ストアドプロシージャを作成するか、MySQLを処理するアプリケーションで処理することをお勧めします。

+0

トリガー以外にも、純粋なクエリで他の方法を実行していますか? – slier

+0

私は、トリガーについて間違いを犯したと認識した後、私の答えを更新しました。 – kba

関連する問題