sql >> Databasteknik >  >> RDS >> Mysql

Fråga om MYSQL PÅ DUBLIKATNYCKELUPPDATERING

ON DUPLICATE KEY UPDATE utför helt enkelt SET uttalanden som du tillhandahåller den i fallet med en dubblettnyckel. Den jämför inte enskilda kolumnvärden och uppdaterar bara de olika. Det låter som att det fungerar för det du vill göra så länge du har rätt kolumn(er) definierade som UNIQUE KEY eller PRIMARY KEY .

Men vad jag normalt gör är att köra infogningen och sedan fånga felet och utföra en annan åtgärd om jag behöver. Detta har nackdelen med att utfärda två frågor om det finns en dubblett, men enligt min mening är det mycket mer underhållbart.

Exempel:

$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. Konfiguration av lagringsinställningar [fil kontra databas]

  2. Hur man använder MySQL-dump från en fjärrdator

  3. migrera data från MS SQL till PostgreSQL?

  4. Är det nödvändigt att kassera DbCommand efter användning?