Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

MYSQL ON DUPLICATE KEY UPDATE pergunta


ON DUPLICATE KEY UPDATE simplesmente executa o SET instruções que você fornece a ele no caso de uma chave duplicada. Ele não compara valores de colunas individuais e apenas atualiza os diferentes. Parece que funcionará para o que você deseja fazer, desde que você tenha a(s) coluna(s) apropriada(s) definida(s) como UNIQUE KEY ou PRIMARY KEY .

No entanto, o que normalmente faço é executar a inserção e, em seguida, capturar o erro e executar uma ação diferente, se necessário. Isso tem o lado negativo de emitir 2 consultas se houver uma duplicata, mas na minha opinião é muito mais sustentável.

Exemplo:
$db = new PDO($dsn, $user, $pass);
$stmt = $db->prepare('INSERT INTO some_tbl (col1,col2,col3) VALUES (?,?,?)');
$values = array('Col 1 value','Col 2 Value', 'Col 3 Value');
try {
  $db->execute($values);
} catch (PDOException $e) {
  if($e->getCode() == 23000){
    // dupe key do some other action whether update or otherwise
  } else {
    // rethrow non dupe errors
    throw $e;
  }
}