是否可以從同一個 MySQL 表中級聯洗掉?我想在關系中參考自身的表中級聯洗掉。
例子:
我有一個comments表,其中comment_id和中的相同 id 在哪里。parent_idparent_idcomment_id
Parent_id可以是另一個comment_id,也可以是null根評論。
我希望能夠選擇此樹中的任何節點并將其洗掉。在此程序中,應洗掉所有子節點和子子節點。
我試圖使用此查詢更改我的表
ALTER TABLE `comment`
ADD FOREIGN KEY (`comment_id`)
REFERENCES `comment`(`parent_id`) ON DELETE CASCADE ON UPDATE RESTRICT;
但我最終遇到了一個錯誤
無法添加或更新子行:外鍵約束失敗 (
zendaya001.#sql-6c1_1044ab, CONSTRAINTcomment_ibfk_3FOREIGN KEY (comment_id) REFERENCEScomment(parent_id) ON DELETE CASCADE ON UPDATE RESTRICT)
為了復制,這是我的評論表:
CREATE TABLE `comment` (
`comment_id` int NOT NULL,
`post_id` int UNSIGNED NOT NULL,
`user_id` int NOT NULL,
`parent_id` int DEFAULT NULL,
`content` text NOT NULL,
`type` varchar(50) DEFAULT NULL,
`count_replies` int NOT NULL DEFAULT '0',
`count_likes` int NOT NULL DEFAULT '0',
`timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
--
-- Indexes for table `comment`
--
ALTER TABLE `comment`
ADD PRIMARY KEY (`comment_id`),
ADD KEY `user_id` (`user_id`),
ADD KEY `post_id` (`post_id`),
ADD KEY `parent_id` (`parent_id`);
uj5u.com熱心網友回復:
您嘗試創建方向不正確的外鍵。
一定是:
ALTER TABLE `comment`
ADD FOREIGN KEY (`parent_id`)
REFERENCES `comment`(`comment_id`) ON DELETE CASCADE ON UPDATE RESTRICT;
https://dbfiddle.uk/iJRlziwL
comment_id必須至少定義為 UNIQUE(可能是 PRIMARY KEY)。
即使 ON UPDATE RESTRICT 也設定為 CASCADE,我也無法在表中插入新記錄 – Freesoul
你做錯了什么。
https://dbfiddle.uk/rcUupB2b
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/518119.html
標籤:mysqlsql级联删除
