1

好的,所以我有一个表(在我的 MySQL 数据库中),如下所示:

CREATE TABLE IF NOT EXISTS `funddata` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `ticker` varchar(128) NOT NULL,
  `price_date` date NOT NULL,
  `price` double NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=0 ;

以及一些示例数据:

INSERT INTO funddata (ticker, price_date, price) VALUES ("tick1", '2013-06-01', 36.2);
INSERT INTO funddata (ticker, price_date, price) VALUES ("tick2", '2013-06-01', 14.7);
INSERT INTO funddata (ticker, price_date, price) VALUES ("tick3", '2013-06-01', 102.5);
INSERT INTO funddata (ticker, price_date, price) VALUES ("tick1", '2013-07-01', 38.7);
INSERT INTO funddata (ticker, price_date, price) VALUES ("tick2", '2013-07-01', 16.2);

现在假设我想为tick1. 如果我想添加的价格已经存在于该日期的表中,那么我想用新价格更新那里的价格,否则我只想将其作为新记录插入。

考虑到没有 2 条记录应该共享相同的代码和日期,从 ( ticker, )中创建唯一索引是否有意义?price_date如果是这样,我将如何做到这一点以及如何使用这样的索引。

4

1 回答 1

0
CREATE UNIQUE INDEX index_name ON funddata(priceDate, price); 

然后使用INSERT... ON DUPLICATE KEY UPDATE

但是,这仍然打破了第一范式。http://en.wikipedia.org/wiki/First_normal_form

于 2013-09-06T12:31:24.683 回答