2016-05-07 19 views
2

2つのテーブルがあります。 userおよびcomment。ユーザーがコメントに投票できるようにして、user_vote_commentという別のテーブルを作成しました。 userテーブルのid列と、commentテーブルのid列をuser_vote_commentテーブルの複合主キーにします。外部キー制約のため行を削除できません

enter image description here

これはuser_vote_commentテーブルの構造である:

CREATE TABLE IF NOT EXISTS `user_vote_comment` (
    `user_id` INT(11) UNSIGNED NOT NULL, 
    `comment_id` INT(11) UNSIGNED NOT NULL, 
    PRIMARY KEY (`user_id`, `comment_id`), 
    INDEX `fk_user_vote_comment_comment1_idx` (`comment_id` ASC), 
    CONSTRAINT `fk_user_vote_comment_user1` 
    FOREIGN KEY (`user_id`) 
    REFERENCES `user` (`id`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION, 
    CONSTRAINT `fk_user_vote_comment_comment1` 
    FOREIGN KEY (`comment_id`) 
    REFERENCES `comment` (`id`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION) 
ENGINE = InnoDB 
DEFAULT CHARACTER SET = utf8 

は今、私はuser_vote_commentにいくつかの行を追加しましたが、私は、ユーザーがそのオプションを持っていると思ったので、私はいくつかの票を削除したいですunvoteする。しかし、私はこのエラーメッセージが表示されます:

Error 1451: Cannot delete or update a parent row: a foreign key constraint fails (`user_vote_comment`, CONSTRAINT `fk_user_vote_comment_comment1` FOREIGN KEY (`comment_id`) REFERENCES `comment` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION) 

ここでは、ユーザーとコメントテーブルが親テーブルであると思いましたか? user_vote_commentの一部の行はその情報に依存していますが、他の方法では使用できないため、ユーザーまたはコメントを削除すると制約があると意味があります。

user_vote_commentの行を削除できない理由がわかりません。行を削除できないと、あまりにも制限されているようです。

どうすればよいですか?

+0

'user_vote_comment'から行を削除しようとしたときに外来キー制約が失敗するのはなぜか分かりませんが、' ON DELETE NO ACTION'は 'comment'や' user'テーブルの行の削除を防ぎます'user_vote_comment'テーブルの行によって参照されて孤立したエントリを避ける ' UP UP NO NOTION ACTION'と同じことが起こります。これは、 'comment'や' user'で参照される行の主キーを更新しないようにします。 'user_vote_comment 'テーブル。 データの一貫性については、ユーザとコメントの削除を許可する場合は、 'ON DELETE CASCADE'を指定する必要があると思います。 –

答えて

1

ON DELETE CASCADEを設定することができます。問題の原因となっている上記の問題で他に何か言及していないことがありますか?

私はSQLFiddle(http://www.sqlfiddle.com/#!9/c726aa/1/0)で簡単なテストを行いましたが、USER_VOTE_COMMENTテーブルからうまく削除できます。

-1

あなたは、私は何があなたのSQLと間違っているとは思わない代わりにON DELETE NO ACTION

+1

すべてのユーザーとコメントを削除しようとしませんか?それは彼らが子供のテーブルだと思っているから、いつそれが反対でなければならないのだろう。 – Alex

関連する問題