gpt4 book ai didi

mysql 与 ON DUPLICATE KEY UPDATE 和 key 有关的问题

转载 作者:行者123 更新时间:2023-11-29 14:06:40 25 4
gpt4 key购买 nike

我当前的数据库表如下所示:

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、 rating_user_id 和 photo_id 的任何条目,它也会创建一个新条目。这是因为我为 rating_id 定义了主键吗?

我希望它用新的评级值更新现有条目。

有什么想法吗?

最佳答案

您需要复合键上的 UNIQUE 索引来定义您要查找的唯一元组。就您而言,似乎 user_idphoto_id 是相关的。如果没有这个,唯一的唯一键是 rating_id ,每次都会自动为您填充。

另外,请不要在重要的生产数据库上使用 MyISAM。与 InnoDB 相比,它非常脆弱,迟早会被损坏而无法修复。

关于mysql 与 ON DUPLICATE KEY UPDATE 和 key 有关的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14245582/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com