sql >> Base de Datos >  >> RDS >> Mysql

MYSQL EN ACTUALIZACIÓN DE CLAVE DUPLICADA pregunta

ON DUPLICATE KEY UPDATE simplemente realiza el SET declaraciones que le proporcione en el caso de una clave duplicada. No compara valores de columnas individuales y solo actualiza los que difieren. Parece que funcionará para lo que desea hacer siempre que tenga las columnas adecuadas definidas como UNIQUE KEY o PRIMARY KEY .

Sin embargo, lo que normalmente hago es ejecutar la inserción y luego detectar el error y realizar una acción diferente si es necesario. Esto tiene la desventaja de emitir 2 consultas si hay un duplicado pero, en mi opinión, es mucho más fácil de mantener.

Ejemplo:

$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;
  }
}