当前位置: 首页 > 面试题库 >

清空自引用MySQL表的最佳方法是什么?

邓嘉致
2023-03-14
问题内容

我有一个带有递归parent_id的自引用MySQL表:

CREATE TABLE `recursive` (
  `id` int(11) NOT NULL auto_increment,
  `parent_id` int(11) default NULL,
  `name` varchar(100) NOT NULL,
  PRIMARY KEY  (`id`),
  KEY `data_categorysource_parent_id` (`parent_id`),
  CONSTRAINT `parent_id_refs_id_627b4293`
    FOREIGN KEY (`parent_id`) REFERENCES `data_categorysource` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

在测试期间,我想清空它,但TRUNCATE失败:

TRUNCATE `recursive` 
/* SQL Error: Cannot delete or update a parent row: a foreign key
constraint fails...

我目前必须手动删除所有记录,从树的底部开始向上操作。即使是小树,这也很繁重。

有没有解决此问题的简单方法?我无法DROP在表中轻松地重新创建该表,因为其他表已对其进行引用(我已经将其截断了,所以那里应该没有数据完整性问题)。


问题答案:

为什么不:

UPDATE 'recursive' SET 'parent_id' = NULL WHERE 'parent_id' IS NOT NULL;
DELETE FROM 'recursive';



 类似资料:
  • 问题内容: 我的任务是维护一个最近遭受SQL注入攻击的受害者的非营利性网站。有人利用站点上的表单将文本添加到数据库中每个可用的类似文本的字段(varchar,nvarchar等)中,当将其呈现为HTML时,该字段将包含并执行JavaScript文件。 Google对URL的搜索表明它来自罗马尼亚或中国以外的垃圾邮件发送者,但是现在这并不重要。 我仔细检查并手动从显示在网站上最可见和最受欢迎的页面上

  • 问题内容: 复制列表的最佳方法是什么?我知道以下方法,哪种更好?还是有另一种方法? 问题答案: 如果要浅拷贝(不复制元素),请使用: 如果要进行深层复制,请使用复制模块:

  • 问题内容: 用jQuery删除表行的最佳方法是什么? 问题答案: 你是对的: 如果您的行中包含,则此方法很好用,例如: 如果没有,则可以使用jQuery的大量选择器中的任何一个。

  • 问题内容: 我有这张桌子(500,000行) 我正在考虑通过(在所有网站中显示仅1个月的记录)进行每个查询 同时,我想在where子句中添加 像这样的事情: 该查询现在还可以并且没有索引就可以快速进行,但是在尝试使用它时却变得太慢了,所以我使用了该索引 它的工作和变得很快,现在我想喜欢这个 这是 该查询速度太慢的原因,因为 然后我试图删除旧索引并添加此 它也太慢了 如果我仅使用单一索引怎么办?在c

  • 问题内容: 基本上,我的问题是- 我有一个价格清单,其中一些是历史价格(即,我希望能够搜索到产品X在3月11日价格为0.99美元,在4月1日价格为1.99美元,等等)。存储此信息的最佳方法是什么? 我以为我可能会有一个产品表,该产品表具有一个价格表的外键。最初,我认为存储当前价格可能是最好的选择,但是我想我希望能够存储历史价格数据,所以最好的方法是存储一个类似于以下价格表的表: 我在这里有点茫然。

  • 问题内容: 我想到了两种实现方式:在性能,可读性和可维护性方面,您认为其中哪一个更好? 创建像这样的UIColor扩展 } 创建一个结构: } 问题答案: 答: 扩展,以我的专业意见。 考虑一下;从哲学上讲,您是在“扩展”所提供的颜色范围。如果您的颜色名称是唯一的,并且新功能遵循Apple的方法命名协议(即),则扩展似乎更整洁。一种或两种新颜色(以我的观点)并不能保证全部是专用的。 奖励答案:(或