2015-04-26 47 views
1

我有一個帖子和評論的結構後刪除評論,我改變它添加一個外鍵:與國外KEY

帖子:

CREATE TABLE IF NOT EXISTS `posts` (
    `id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT, 
    `user` varchar(40) NOT NULL, 
    `text` varchar(500) NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=1 ; 

這篇文章的評論:

CREATE TABLE IF NOT EXISTS `comments` (
    `id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT, 
    `postid` int(11) UNSIGNED NOT NULL, 
    `user` varchar(40) NOT NULL, 
    `texto` varchar(3000) NOT NULL, 
    PRIMARY KEY (`id`), 
    FOREIGN KEY (`postid`) REFERENCES posts (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=1 ; 

因此,如果用戶想要刪除他的帖子:

delete FROM posts WHERE id=? and user=? 

和他的帖子有評論mysql show me:無法刪除或更新父行:外鍵約束失敗。

我的問題是,這篇文章/評論結構是否正確?我應該使用外鍵嗎?如何刪除這個帖子,如果它有評論?

回答

0

嗯,在我看來,你需要設置cascade選項。當行被刪除時,cascade選項將刪除與FK相關的任何內容。這意味着,當一個帖子被刪除時,所有評論相關到該帖子也將被刪除。

CREATE TABLE IF NOT EXISTS `comments` (
    `id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT, 
    `postid` int(11) UNSIGNED NOT NULL, 
    `user` varchar(40) NOT NULL, 
    `texto` varchar(3000) NOT NULL, 
    PRIMARY KEY (`id`), 
    FOREIGN KEY (`postid`) REFERENCES posts (`id`) 
    ON DELETE CASCADE 
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=1 ; 

讓我知道這是否工作。

乾杯!

+0

哦,它的工作原理!謝謝! –