sql >> Databáze >  >> RDS >> Mysql

Otázka AKTUALIZACE DUPLIKÁTNÍHO KLÍČE MYSQL

ON DUPLICATE KEY UPDATE jednoduše provede SET příkazy, které mu poskytnete v případě duplicitního klíče. Neporovnává jednotlivé hodnoty sloupců a pouze aktualizuje ty odlišné. Zní to, že to bude fungovat pro to, co chcete dělat, pokud máte správné sloupce definované jako UNIQUE KEY nebo PRIMARY KEY .

Co však normálně dělám, je spustit vložku a pak zachytit chybu a provést jinou akci, pokud potřebuji. To má nevýhodu v tom, že v případě duplikátu zadáte 2 dotazy, ale podle mého názoru je to mnohem lépe udržovatelné.

Příklad:

$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. Rails 3.1:Dotazování Postgres na záznamy v časovém rozsahu

  2. Vypočítejte časový rozdíl mezi dvěma řadami

  3. Jak mohu použít připravené výpisy v CodeIgniter

  4. Jak vybrat data z tabulky, kde má název tabulky prázdná místa?