0

現在のDBテーブルは次のようになります。

CREATE TABLE IF NOT EXISTS `image_ratings` (
 `rating_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
 `user_id` int(11) unsigned NOT NULL,
 `photo_id` int(11) unsigned NOT NULL DEFAULT '0',
 `rating` tinyint(3) unsigned NOT NULL DEFAULT '0',
 `rated_user_id` int(11) unsigned NOT NULL,
 `timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
 PRIMARY KEY (`rating_id`),
 KEY `user_id` (`user_id`),
 KEY `rated_user_id` (`rated_user_id`),
 KEY `photo_id` (`photo_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

私がそのように電話をかけるとき:

INSERT INTO image_ratings (user_id, photo_id, rating, rated_user_id) VALUES (5, 5975, 8, 5973 ) ON DUPLICATE KEY UPDATE user_id=5, photo_id=5975, rating=8, rated_user_id=5973, timestamp=NOW() 

同じuser_id、rated_user_id、およびphoto_idのエントリがすでにある場合でも、新しいエントリが作成されます。これは、rating_idにPRIMARYキーが定義されているためですか?

既存のエントリを新しい評価値で更新することを期待します。

何かご意見は?

4

1 に答える 1

1

UNIQUE探している一意のタプルを定義する複合キーのインデックスが必要です。あなたの場合、それは関連しているように思わuser_idphoto_idます。これがないと、唯一の一意のキーは、rating_id毎回自動的に入力されるキーです。

また、重要な本番データベースでMyISAMを使用しないでください。InnoDBと比較すると非常に脆弱であり、遅かれ早かれ修復できないほど破損してしまいます。

于 2013-01-09T20:12:01.770 に答える