那么,我的朋友告诉我,我应该开始使用InnoDB作为我的数据库,所以我第一次尝试。我在删除记录/索引/字段/表格时遇到问题。每当我尝试删除一条记录时,我都必须去所有的相关记录,删除这些记录,然后回去删除我的原始记录。我无法删除索引!有没有更简单的方法来做到这一点(因为当我要在PHP中运行,它不会删除任何东西),还是应该跳回到MyISAM?您认为哪些更好?如何删除MySQL InnoDB中的所有相关记录?
回答
如果你喜欢删除很多东西,InnoDB可能不适合你。 InnoDB比MyISAM严格得多。查询时速度更快(SELECT
,SHOW
等),但更新速度较慢(UPDATE
,INSERT
等)。
InnoDB的CASCADE是神奇的,但要非常小心。它也很慢(因为数据库引擎本身会检查所有约束条件)。如果您正在处理级联到其他删除级联的其他更新级联到其他删除级联等的记录,您将等待很长时间。
如果你在开发删除,并通过InnoDB的约束恼火,你可能会发现SET FOREIGN_KEY_CHECKS = 0;
非常有帮助:
SET FOREIGN_KEY_CHECKS = 0;
/* do all kinds of dangerous deletes, eg. delete everything in the db */
SET FOREIGN_KEY_CHECKS = 1;
不要在应用程序本身使用,或绝对确保你不会破坏任何依赖关系。
如果您希望从属记录在主表中删除记录时自动删除,则需要在外键上指定ON DELETE CASCADE
。
按照说明书,你的外键约束的选择是其中一个之中:
CASCADE:删除或更新从父表中的行,并 自动删除或更新匹配的行孩子桌子。 支持ON DELETE CASCADE和ON UPDATE CASCADE。在 两个表之间,不要定义在父表或子表中的同一列上执行 的几个ON UPDATE CASCADE子句。
注意级联外键操作不激活触发器。
SET NULL:从父表中删除或更新该行,并将子表中的 外键列设置为NULL。 ON DELETE SET NULL和ON UPDATE SET支持NULL子句。
如果您指定SET NULL操作,请确保您没有将子表中的列作为NOT NULL声明为 。
限制:拒绝父表的删除或更新操作。 指定RESTRICT(或NO ACTION)与删除ON或DELETE子句的ON 相同。
无动作:来自标准SQL的关键字。在MySQL中,相当于 RESTRICT。如果引用表中存在相关外键值,InnoDB将拒绝父表 表的删除或更新操作。 某些数据库系统具有延期检查,NO ACTION是延期检查。在MySQL中,外键约束立即被检查 ,所以NO ACTION与RESTRICT相同。
默认的,如果你不指定任何东西,是NO ACTION
- 这就是为什么你删除没有做任何事情现在。
这正是它应该如何工作。
它保留了所谓的数据完整性。如果你有一个用户和一个与之关联的地址,你应该不能删除用户,除非你首先删除一个地址 - 否则你会在数据库中留下流氓数据。
如果没有使用ON DELETE CASCADE
来强制执行,您的应用程序应负责确保删除所有相关数据。
一般innoDB
是多的保护您的数据的完整性更好地与它所以坚持不回去myISAM
(还有什么每台发动机是最好的前一个问题,但除非你给我们更多的细节存在没有意义住在那)。
- 1. 在MySQL中删除相关记录
- 2. 如何删除表中的一行时删除所有相关的表记录?
- 3. 如何删除记录以及所有相关记录在ASP.NET(C#)
- 4. 使用laravel雄辩删除相关表中的所有记录
- 5. 删除所有关联的记录
- 6. sql删除相关记录?
- 7. 如何删除MySQL中的所有孤立记录?
- 8. 删除条目而不删除相关条目mysql innoDB
- 9. PHP,PDO,MySQL和InnoDB,如何使用FK更新/删除记录?
- 10. 删除具有特定计数的mysql相关记录
- 11. 从巨大的MySQL innoDB中删除记录表
- 12. 如何删除与“用户”关联的所有记录?
- 13. 删除所有旧记录
- 14. MySQL“记得”删除了InnoDB表
- 15. 删除NSManagedObjectContext中的所有记录
- 16. CakePHP删除表中的所有记录
- 17. 使用Java在mysql中删除表中的所有记录
- 18. 如何删除CouchDB中的数据库中的所有记录?
- 19. 条件相关记录删除在afterDelete()
- 20. 删除多个记录相关表
- 21. 如何删除空的mySQL记录?
- 22. 如何删除MySQL中的所有表?
- 23. 删除所有关系表中的记录
- 24. 删除所有具有相反符号的记录
- 25. 删除相关的记录删除原来的Rails中的has_many关联getter后
- 26. 从临时表中删除记录时将被删除的所有记录
- 27. 删除除一个重复记录以外的所有记录
- 28. mysql的删除与相同ID的所有记录的话还没说完
- 29. ActiveRecord的 - 获取所有相关记录
- 30. 如何根据阈值删除除一些记录以外的所有记录?
是的,数据库设计已基本完成,但我处于应用程序的早期开发阶段,使用密钥检查进行测试相当困难,但我认为我会采取不同的操作而不是删除操作,因为我想保留一些有外键的数据。 – ItsGreg