在一个查询中MYSQL ON DUPLICATE KEY UPDATE和IGNORE

时间:2014-10-01 18:09:53

标签: mysql

执行一个在de表中插入一些值的查询,如果存在ID,Year,rownum(唯一索引)的组合,我会执行常规的ON DUPLICATE KEY UPDATE,从而更新行。查询如下所示:

INSERT INTO data_advertenties_prijzen (`ID`, `year`, `rownum`, `status_prijs`,
    `datum_dag`, `timestamp_dag`) 
VALUES (100,2014,1,1,'2014-01-01',1388534400),
       (100,2014,2,1,'2014-07-16',1405468800),
       (100,2014,3,1,'2014-07-26',1406332800)
ON DUPLICATE KEY UPDATE 
    status_prijs = VALUES(status_prijs), 
    datum_dag = VALUES(datum_dag), 
    timestamp_dag = VALUES(timestamp_dag)

那里没有什么困难,但是.......

我还想在同一个查询中为1个值执行ON DUPLICATE IGNORE。我还想在2015年插入一行。例如:(100,2015,1,1,' 2015-01-01',1405468800)... 如果已经存在ID = 100的行,Year = 2015且rownum = 1,则必须忽略该行的插入。

怎么做?

1 个答案:

答案 0 :(得分:1)

您可以在ON DUPLICATE子句中有条件地更改值。

我做了这个实验,以确保它有效:

INSERT INTO data_advertenties_prijzen VALUES (100, 2014, 1, 7, now(), 1406332800)
ON DUPLICATE KEY UPDATE
    status_prijs = IF((id,year,rownum)=(100,2015,1), status_prijs, VALUES(status_prijs)),
    datum_dag = IF((id,year,rownum)=(100,2015,1), datum_dag, VALUES(datum_dag)),
    timestamp_dag = IF((id,year,rownum)=(100,2015,1), timestamp_dag, VALUES(timestamp_dag));

因此,如果我尝试插入一个特定的id / year / rownum三重奏,它只使用现有值,否则如果是其他id / year / rownum,则使用我在INSERT中指定的VALUES。

不幸的是,您必须为要更新的每个列重复表达式。