Mysql
 sql >> Database >  >> RDS >> Mysql

MYSQL SU AGGIORNAMENTO CHIAVE DUPLICATA domanda

ON DUPLICATE KEY UPDATE esegue semplicemente il SET dichiarazioni che gli fornisci in caso di chiave duplicata. Non confronta i valori delle singole colonne e aggiorna solo quelli diversi. Sembra che funzionerà per quello che vuoi fare purché tu abbia la colonna o le colonne appropriate definite come UNIQUE KEY o PRIMARY KEY .

Tuttavia, quello che faccio normalmente è eseguire l'inserto e quindi rilevare l'errore ed eseguire un'azione diversa se necessario. Questo ha il lato negativo di emettere 2 query se c'è un duplicato, ma secondo me è molto più gestibile.

Esempio:

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