Mysql
 sql >> Base de données >  >> RDS >> Mysql

Question MYSQL SUR LA MISE À JOUR DE LA CLÉ EN DOUBLE

ON DUPLICATE KEY UPDATE effectue simplement le SET relevés que vous lui fournissez en cas de clé en double. Il ne compare pas les valeurs de colonne individuelles et ne met à jour que les valeurs différentes. Il semble que cela fonctionnera pour ce que vous voulez faire tant que vous avez la ou les colonnes appropriées définies comme UNIQUE KEY ou PRIMARY KEY .

Cependant, ce que je fais normalement est d'exécuter l'insertion, puis de détecter l'erreur et d'effectuer une action différente si nécessaire. Cela a l'inconvénient d'émettre 2 requêtes s'il y a un doublon, mais à mon avis, c'est beaucoup plus facile à gérer.

Exemple :

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