在重复键更新 - 多列

Luc*_*ord 27 php mysql sql database

在重复键更新时使用insert ...时,更新多列的语法是什么?

INSERT INTO table1 (col1, col2, col3, col4) VALUES (’$val1’, ‘$val2’, ‘$val3’, ‘$val4’)
ON DUPLICATE KEY UPDATE col2=‘$val2’, col3=‘$val3’, col4=‘$val4’ // <-- not sure
Run Code Online (Sandbox Code Playgroud)

更新:我在PHP中使用它.由于这是一个语法问题,因此非常相关.

$result = mysql_query("INSERT INTO table1 (col1, col2, col3, col4) 
                         VALUES (’$val1’, ‘$val2’, ‘$val3’, ‘$val4’)
                         ON DUPLICATE KEY UPDATE (col2=‘$val2’, col3=‘$val3’, col4=‘$val4’)")
Run Code Online (Sandbox Code Playgroud)

再次,不确定这个最后一部分与"更新".

sat*_*hia 33

INSERT INTO table1
  (`col1`, `col2`, `col3`, `col4`)
VALUES
  ('val1', 'val2', 'val3', 'val4')
ON DUPLICATE KEY UPDATE
  `col2`='val2',
  `col3`='val3', [...]
Run Code Online (Sandbox Code Playgroud)

我修改了你的报价和标记.

编辑:

在PHP中:

$result = mysql_query("
     INSERT INTO table1
         (col1, col2, col3, col4)
     VALUES
         ('" . $val1 . "',  '" . $val2 . "', '" . $val3 . "', '" . $val4 . "')
     ON DUPLICATE KEY UPDATE
         col2='" . $val2 . "',
         col3='" . $val3 . "',
         col4='" . $val4 . "'"
 );
Run Code Online (Sandbox Code Playgroud)

请注意,值由单引号括起'.如果值是数字类型(INT,FLOAT等),则可以删除这些引号.反引号周围的列名选择的,只要你不使用列名状count,typetable.

在PHP示例中,字符串连接用于清楚地分离变量.


Wri*_*ken 27

嗯,这是旧的.但是,当然,你只需要提供一个值一次,没有理由将它添加第二次查询(其中派上用场了多个插件,或准备语句):

INSERT INTO table1
  (col1, col2, col3, col4)
VALUES
  ('val1', 'val2', 'val3', 'val4')
ON DUPLICATE KEY UPDATE
  col2=VALUES(col2),
  col3=VALUES(col3) [,...]
Run Code Online (Sandbox Code Playgroud)

哪个具有优势,它仍然适用于多个插入语句:

INSERT INTO table1
  (col1, col2, col3, col4)
VALUES
  ('val1', 'val2', 'val3', 'val4'),
  ('val5', 'val6', 'val7', 'val8'),
  ('val9', 'val10', 'val11', 'val12')
ON DUPLICATE KEY UPDATE
  col2=VALUES(col2),
  col3=VALUES(col3) [,...]
Run Code Online (Sandbox Code Playgroud)


Woj*_*ski -1

您的查询似乎是正确的。这是我的此类查询的示例:

INSERT INTO Stat (id, month, year, views, redirects, onList, onMap, emails) VALUE ("' . $Id . '","' . $month . '","' . $year . '",0,0,"' . $data['onList'] . '","' . $data['onMap'] . '",0) ON DUPLICATE KEY UPDATE onList=onList+' . $data['onList'] . ', onMap=onMap+' . $data['onMap']
Run Code Online (Sandbox Code Playgroud)