多表DELETE语句是不是很糟糕?为什么?

时间:2013-06-13 03:16:03

标签: mysql myisam sql-delete

我正在使用一个使用MyISAM存储引擎的MySQL数据库。我使用了多表删除语法。到目前为止,我只在需要一次从多个子表中删除时才使用它。但我正在考虑使用它从一个查询中删除多个子表父表。

最近,我在SO和其他论坛上发现了几个帖子,说一次删除多个表是个坏主意。但是没有一张海报解释为什么不推荐它。

据我所知,涉及具有外键约束的InnoDB表的多表删除可能存在问题,因为您无法控制表的处理顺序。显然,在我的情况下这不是问题。

我原以为多表删除会从所有表中删除或者没有删除。但我无法找到有关这是否属实的信息。如果它可以部分成功,那将破坏数据。

一次删除多个MyISAM表是不是一个好主意?它总是一个坏主意,还是只涉及父母/子女关系?请解释原因。

对于记录,此时此项目不能更改为InnoDB。

1 个答案:

答案 0 :(得分:1)

我可以看到的一个可能的问题是,如果它存在故障(如服务器故障,断电等)并且您已经在相关子记录之前删除了父记录(来自父表)你有所谓的orphan record(s),这意味着相关的子记录/表不再与母记录/表相关。虽然如果在父表/记录之前首先删除子表/记录,这可以克服。

另一个是performance issue,因为MyISAM使用表级锁定,因此删除多个记录(来自多个表)比从少数来源删除更有可能降低访问时间性能。