sql >> Database >  >> RDS >> Mysql

MYSQL OP DUPLICATE KEY UPDATE vraag

ON DUPLICATE KEY UPDATE voert eenvoudig de SET . uit verklaringen die u eraan geeft in het geval van een duplicaatsleutel. Het vergelijkt geen afzonderlijke kolomwaarden en werkt alleen de verschillende bij. Het klinkt alsof het zal werken voor wat je wilt doen, zolang je de juiste kolom(men) hebt gedefinieerd als UNIQUE KEY of PRIMARY KEY .

Wat ik echter normaal doe, is de insert uitvoeren en vervolgens de fout opvangen en een andere actie uitvoeren als dat nodig is. Dit heeft als nadeel dat er twee vragen worden gesteld als er een duplicaat is, maar naar mijn mening is het veel beter te onderhouden.

Voorbeeld:

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


  1. EF:onjuist gebruik van ruimtelijke/fulltext/hash-index en expliciete indexvolgorde

  2. Haal de totale recordgroei in de loop van de tijd op in mysql

  3. Orakel:LANG of CLOB?

  4. Een extensie maken voor SSMS 2019 (v18)