您如何看待mysql表上的级联删除?
这个问题在标题里 我用来存储我(生产)网站数据的数据库包含大量关于删除级联的您如何看待mysql表上的级联删除?,mysql,sql,cascade,Mysql,Sql,Cascade,这个问题在标题里 我用来存储我(生产)网站数据的数据库包含大量关于删除级联的 我只是想知道这是一件好事,还是手动编写所有删除代码的更好方法 一方面,它不是很明确:删除是通过魔术实现的,另一方面,它使开发更容易:我不必在脑海中保留数据库的整个模式。我认为保持引用完整性是一件好事。您最不希望看到的是数据库中的孤立行 在不使用引用完整性时查看MySQL文档中的事项: MySQL让数据库开发人员可以选择使用哪种方法。如果您不需要外键,并且希望避免与强制引用完整性相关的开销,那么可以选择另一个存储引擎,例
我只是想知道这是一件好事,还是手动编写所有删除代码的更好方法
一方面,它不是很明确:删除是通过魔术实现的,另一方面,它使开发更容易:我不必在脑海中保留数据库的整个模式。我认为保持引用完整性是一件好事。您最不希望看到的是数据库中的孤立行
在不使用引用完整性时查看MySQL文档中的事项:
MySQL让数据库开发人员可以选择使用哪种方法。如果您不需要外键,并且希望避免与强制引用完整性相关的开销,那么可以选择另一个存储引擎,例如MyISAM。(例如,MyISAM存储引擎为只执行插入和选择操作的应用程序提供了非常快的性能。在这种情况下,表中没有孔,并且插入件可以与检索同时执行。参见第8章10节3,“并发插入”)< /P>
如果选择不利用引用完整性检查,请记住以下注意事项:
在没有服务器端外键关系检查的情况下,应用程序本身必须处理关系问题。例如,它必须注意以正确的顺序将行插入表中,并避免创建孤立的子记录。它还必须能够从多个记录插入操作中间出现的错误中恢复。
如果ON DELETE是应用程序所需的唯一引用完整性功能,那么您可以通过使用多个table DELETE语句来使用单个语句从多个表中删除行,从而实现与MySQL Server 4.0类似的效果。见第13.2.2节“删除语法”
缺少ON DELETE的一种解决方法是,在从具有外键的表中删除记录时,向应用程序添加适当的DELETE语句。实际上,这通常与使用外键一样快,而且更便于携带
请注意,使用外键有时会导致问题:
外键支持解决了许多引用完整性问题,但仍然需要仔细设计键关系,以避免循环规则或不正确的级联删除组合
DBA创建关系拓扑的情况并不少见,这使得从备份中恢复单个表变得很困难。(MySQL通过允许您在重新加载依赖于其他表的表时临时禁用外键检查来缓解此困难。请参阅第14.3.5.4节“外键约束”。从MySQL 4.1.1开始,mysqldump在重新加载时自动生成利用此功能的转储文件。)
来源:我认为维护引用完整性是一件好事。您最不希望看到的是数据库中的孤立行
在不使用引用完整性时查看MySQL文档中的事项:
MySQL让数据库开发人员可以选择使用哪种方法。如果您不需要外键,并且希望避免与强制引用完整性相关的开销,那么可以选择另一个存储引擎,例如MyISAM。(例如,MyISAM存储引擎为只执行插入和选择操作的应用程序提供了非常快的性能。在这种情况下,表中没有孔,并且插入件可以与检索同时执行。参见第8章10节3,“并发插入”)< /P>
如果选择不利用引用完整性检查,请记住以下注意事项:
在没有服务器端外键关系检查的情况下,应用程序本身必须处理关系问题。例如,它必须注意以正确的顺序将行插入表中,并避免创建孤立的子记录。它还必须能够从多个记录插入操作中间出现的错误中恢复。
如果ON DELETE是应用程序所需的唯一引用完整性功能,那么您可以通过使用多个table DELETE语句来使用单个语句从多个表中删除行,从而实现与MySQL Server 4.0类似的效果。见第13.2.2节“删除语法”
缺少ON DELETE的一种解决方法是,在从具有外键的表中删除记录时,向应用程序添加适当的DELETE语句。实际上,这通常与使用外键一样快,而且更便于携带
请注意,使用外键有时会导致问题:
外键支持解决了许多引用完整性问题,但仍然需要仔细设计键关系,以避免循环规则或不正确的级联删除组合
DBA创建关系拓扑的情况并不少见,这使得从备份中恢复单个表变得很困难。(MySQL通过允许您在重新加载依赖于其他表的表时临时禁用外键检查来缓解此困难。请参阅第14.3.5.4节“外键约束”。从MySQL 4.1.1开始,mysqldump在重新加载时自动生成利用此功能的转储文件。)
来源:级联删除是一个很好的工具,您可以使用它,只要您确保只在最合理的地方使用它们
选择使用级联删除的主要情况是,当您有一个表对另一个表中的一行(且仅一行)“拥有”的实体进行建模时。例如,如果您有一个模拟peop的表