MySQL插入多行并且不更新已存在的行

时间:2018-11-22 09:44:34

标签: mysql

我有一张桌子,就像下面的桌子一样。 这是一个价格表名称price_data,其中包含唯一键DateTime和值price

 +----------+-------+
 | DateTime | price |
 +----------+-------+
 |2018-01-01| 100.2 | 
 |2018-01-02| 101.5 | 
 +----------+-------+

我想同时将多个价格数据插入表格中。 因此,我可以使用以下SQL来实现这一点。

仅插入两行。

INSERT INTO `price_data` (`DateTime`, `price`) VALUES
('2018-01-03', 100.0),
('2018-01-04', 101.2);

P.S。在实际情况下,我将同时插入100多行。

上述SQL对于该任务来说是完全可以的。

但是,如果要插入的数据已在表中。例如:('2018-01-02', 101.5)。由于密钥已经存在,因此发生错误。

我找到了解决问题的两种方法。

  1. INSERT IGNORE
  2. INSERT ... ON DUPLICATE KEY UPDATE

在第一种情况下,它可以工作并且不显示任何错误消息。但是,根据postINSERT IGNORE将隐藏所有错误,而不是唯一重复的密钥。

INSERT IGNORE INTO `price_data` (`DateTime`, `price`) VALUES
('2018-01-02', 101.5),
('2018-01-03', 100.0);

在第二种情况下,它可以正常工作,并且也不会打印任何错误消息。 但是,SQL会更新至少一列,这是一个副作用。因为如果行存在,我不想更新任何列,所以我将密钥DateTime更新为新的DateTime。由于DateTime将等于新的DateTime,因此表中没有任何变化。

INSERT INTO `price_data` (`DateTime`, `price`) VALUES
('2018-01-02', 101.5),
('2018-01-03', 100.0);
ON DUPLICATE KEY UPDATE DateTime=VALUES(DateTime);

第二种方法更好吗?

还有其他方法可以做到这一点并减少时间吗?

非常感谢您。

0 个答案:

没有答案