Je fais le tutoriel SQL suivant: http://sql.learncodethehardway.org/book/ex11.html
et dans cet exercice, l'auteur dit dans le deuxième paragraphe:
Dans cette situation, je veux remplacer mon dossier par un autre gars mais conservez l'identifiant unique. Le problème est que je devrais soit faire un DELETE/INSERT dans une transaction pour le rendre atomique, ou je devrais faire une mise à jour complète.
Quelqu'un pourrait-il m'expliquer quel est le problème avec une mise à jour et quand nous pourrions choisir REPLACE au lieu de UPDATE?
Le code UPDATE:
UPDATE person SET first_name = "Frank", last_name = "Smith", age = 100
WHERE id = 0;
Voici le code REPLACE:
REPLACE INTO person (id, first_name, last_name, age)
VALUES (0, 'Frank', 'Smith', 100);
EDIT: Je suppose qu’une autre question que je me pose est la suivante: pourquoi feriez-vous jamais un DELETE/INSERT au lieu d’un simple UPDATE comme indiqué dans la section citée?
Selon la documentation , la différence est la suivante:
REPLACE fonctionne exactement comme INSERT, sauf que si une ancienne ligne de la table a la même valeur qu'une nouvelle ligne pour une clé PRIMARY KEY ou un index UNIQUE, l'ancienne ligne est supprimée avant que la nouvelle ligne ne soit insérée.
Alors qu'est-ce qu'il fait:
Quand est-ce que cela peut devenir utile sur des instructions insert
et update
distinctes?
inserting
/updating
, vous pouvez utiliser replace
: toutes les données associées sont également supprimées);insert
(mauvaise raison, d'accord).Premier remplacement n'est pas largement compris dans tous les moteurs de base de données.
Deuxièmement, remplace/insère/met à jour un enregistrement basé sur la clé primaire. Avec Update, vous pouvez spécifier des conditions plus élaborées:
UPDATE person SET first_name = 'old ' + first_name WHERE age > 50
UPDATE ne créera pas non plus d'enregistrements.
La mise à jour modifiera la valeur des enregistrements existants dans la table en fonction d'une condition particulière. Vous pouvez donc modifier un ou plusieurs enregistrements en une seule requête.
Insérer ou remplacer insérera un nouvel enregistrement si aucun enregistrement n'est présent dans la table, sinon il sera remplacé. Remplacer ne fonctionnera que si et seulement si vous fournissez la valeur de clé primaire dans la requête d'insertion ou de remplacement. Si vous oubliez d'ajouter la valeur du champ de clé primaire, un nouvel enregistrement sera créé dans la table.
Exemple de cas: -
Mise à jour: Vous devez calculer les salaires à l'aide d'une formule utilisant les valeurs des colonnes. Dans ce cas, vous utiliserez toujours la requête de mise à jour car, en utilisant une seule requête, vous pouvez mettre à jour plusieurs enregistrements.
Insérer ou remplacer: Déjà mentionné dans le lien que vous avez partagé.
UPDATE
n'aura aucun effet si la ligne n'existe pas.
Où comme INSERT
ou REPLACE
sera inséré si la ligne n'existe pas ou remplace les valeurs s'il existe.