关于重复密钥更新 - 多列

2022-08-30 14:08:30

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

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

更新:我在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’)")

同样,不确定“更新”的最后一部分。


答案 1

嗯,这已经很旧了。但是,当然,您只需要提供一值,就没有理由在查询中再次添加它(这对于多个插入或预准备语句来说很方便):

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

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

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) [,...]

一个现代的 PHP 示例:

$sql = "INSERT INTO table1 (col1, col2, col3, col4) VALUES (?,?,?,?)
        ON DUPLICATE KEY UPDATE
        col2=VALUES(col2),
        col3=VALUES(col3),
        col4=VALUES(col4)";
$db->prepare($sql)->execute([$val1, $val2, $val3, $val4]);

答案 2
INSERT INTO table1
  (`col1`, `col2`, `col3`, `col4`)
VALUES
  ('val1', 'val2', 'val3', 'val4')
ON DUPLICATE KEY UPDATE
  `col2`='val2',
  `col3`='val3', [...]

我修复了您的报价和刻度线。


推荐