Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Frage zu MYSQL ON DUPLICATE KEY UPDATE

ON DUPLICATE KEY UPDATE führt einfach das SET aus Angaben, die Sie ihm im Falle eines Zweitschlüssels machen. Es vergleicht keine einzelnen Spaltenwerte und aktualisiert nur die unterschiedlichen. Es klingt so, als würde es für das funktionieren, was Sie tun möchten, solange Sie die richtige(n) Spalte(n) als UNIQUE KEY definiert haben oder PRIMARY KEY .

Normalerweise führe ich jedoch die Einfügung aus und fange dann den Fehler ab und führe bei Bedarf eine andere Aktion aus. Dies hat den Nachteil, dass 2 Abfragen ausgegeben werden, wenn es ein Duplikat gibt, aber meiner Meinung nach ist es viel wartungsfreundlicher.

Beispiel:

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