MySQL - MyISAM多表删除(类似于ON CASCADE DELETE)

时间:2011-06-17 19:09:28

标签: myisam multi-table-delete

我希望删除记录引用的所有条目,以及不同表中的所有子项。如果可能的话,我想使用多表删除语句而不是触发器。

例如

Table: forms
id     var
1      foo
2      bar

Table 2: form_options
id     form_id     var
1      1           blah
2      2           hello
3      2           world

Table 3: form_options_info
id     form_options_id     var
1      3                   world info

所以给定上述类型的表结构,如果我从forms中删除第2行,它将删除form_options中的第2,3行以及form_options_info中的第1行。

1 个答案:

答案 0 :(得分:0)

也许不是最好的解决方案,但它有效:

DELETE FROM form_options_info, form_options, forms
  USING forms INNER JOIN form_options INNER JOIN form_options_info
  WHERE (form_options_info.form_options_id = form_options.id 
    AND form_options.form_id = forms.id
    OR form_options.form_id = forms.id)
    AND forms.id = 2;

...或者只是将表格更改为InnoDB; - )......