【发布时间】:2014-05-15 09:40:12
【问题描述】:
我是关系的初学者,所以这听起来很愚蠢。但是,截断表和删除所有记录之间(在 MySQL 中)有什么区别(this 答案仅涉及性能)?
我正在(在 phpMyAdmin 中)使用我的一张测试表进行检查,如何重置表的 auto_increment 值并遇到可以删除所有记录的情况:
DELETE from managers;
但是当我尝试截断此表 (TRUNCATE managers) 时,我收到了警告:Cannot truncate a table referenced in a foreign key constraint (probes, CONSTRAINT probes_ibfk_4 FOREIGN KEY (manager_id) REFERENCES managers (id));。
我不得不用ALTER TABLE managers AUTO_INCREMENT = 1;“重置”auto_increment 的值。
这不是很奇怪吗?到目前为止,我一直认为TRUNCATE = DELETE from managers(在检查和效果方面,因为性能可能不同,但这不是关键)。
如何在TRUNCATE 上弹出约束警告而不是在“全部删除”上弹出?
【问题讨论】:
-
stackoverflow.com/questions/5452760/… 也许?您的表通过外键引用自身...
-
你在哪里看到,我的表引用了它自己?在数据库模式或约束键中都没有这样的引用。我一定是错过了什么。
-
FOREIGN KEY (manager_id) references managers (id) -
FOREIGN KEY (manager_id)引用managers表(id列),但此(manager_id列)是 不同 表中的列。因此,它不引用自身。 MySQL (phpMyAdmin) 错误信息可能有点误导。
标签: mysql phpmyadmin constraints sql-delete truncate