尽管我最初标记为选择的答案是正确的,并且达到了我的要求,但是有一种更好的方法可以做到这一点(其他人也承认但没有考虑)。应该在包含
fund_id和的表上创建一个复合唯一索引
date。
ALTER TABLE funds ADD UNIQUE KEY `fund_date` (`fund_id`, `date`);
然后在插入记录时,在遇到冲突时添加条件:
INSERT INTO funds (`fund_id`, `date`, `price`) VALUES (23, DATE('2013-02-12'), 22.5) ON DUPLICATE KEY UPDATE `price` = `price`; --this keeps the price what it was (no change to the table) or:INSERT INTO funds (`fund_id`, `date`, `price`) VALUES (23, DATE('2013-02-12'), 22.5) ON DUPLICATE KEY UPDATE `price` = 22.5; --this updates the price to the new value
这将为子查询提供更好的性能,并且表的结构更好。需要注意的是,您的唯一键列中不能包含NULL值,因为MySQL仍将它们视为值。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)