回答

收藏

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

技术问答 技术问答 265 人阅读 | 0 人回复 | 2023-09-14

我有一个带有递归parent_id的自引用MySQL表:) |2 O: Z- r0 ?, t
CREATE TABLE `recursive` (
3 M$ ~; f6 m9 r8 H% r( n3 A  `id` int(11) NOT NULL auto_increment," U2 M& c/ [+ r& E% ^
  `parent_id` int(11) default NULL,
9 |& e. O% Y' g$ X& L* \  `name` varchar(100) NOT NULL,. r& h  H& M! r/ G9 k, v+ G
  PRIMARY KEY  (`id`),, q0 O4 Y& f! b" j
  KEY `data_categorysource_parent_id` (`parent_id`),
3 E& y0 G" n4 b* g* J9 o  CONSTRAINT `parent_id_refs_id_627b4293`
9 d3 E" v  }$ K' W    FOREIGN KEY (`parent_id`) REFERENCES `data_categorysource` (`id`)
& F* Z! r: B% P* E: }6 ?0 p! h8 t, D) ENGINE=InnoDB DEFAULT CHARSET=utf8
4 Y" R' X/ I0 Q. V; q在测试期间,我想清空它,但TRUNCATE失败:0 X9 S' L; M, i& x7 Y
TRUNCATE `recursive` - ^! N6 R  k& n7 Q! i" S1 E4 J
/* SQL Error: Cannot delete or update a parent row: a foreign key
$ w# y0 ~# V- `: o# g! s$ Hconstraint fails...
6 y% r+ ]& ~; N4 ?我目前必须手动删除所有记录,从树的底部开始向上操作。即使是小树,这也很繁重。
7 n3 }- b# O' q" x! g9 S% R3 S. C有没有解决此问题的简单方法?我无法DROP在表中轻松地重新创建该表,因为其他表已对其进行引用(我已经将其截断了,所以那里应该没有数据完整性问题)。
: d. u  X& W$ \3 C* M" X               
2 z0 s. v+ n& U解决方案:
; k; f! l9 L8 U) l3 E# u                7 T. P2 x# D# H7 M6 n
. ^6 D) R1 h# _  K* ~% R+ M; ?4 ?
: u0 f2 W& T4 }5 h
                为什么不:
7 n: D- {/ c5 b- b2 D4 [UPDATE 'recursive' SET 'parent_id' = NULL WHERE 'parent_id' IS NOT NULL;
* T+ r& z/ c& ]! |' @* cDELETE FROM 'recursive';
0 ^/ x" a. r/ d/ f4 Y1 E3 g. ^
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则