Dans n’importe quelle application, vous devez ajouter des enregistrements aux tables de base de données et modifier les informations qu’elles stockent. L’instruction UPDATE SQL modifie les données déjà stockées dans la base de données, et l’instruction INSERT ajoute un nouvel enregistrement à une table. La déclaration UPSERT est une combinaison de INSERT et de UPDATE, qui effectue une mise à jour ou ajoute un enregistrement s’il n’existe pas déjà. Ici, nous allons parler de la MISE À JOUR SQL, de l’INSERT et de l’UPSERT.
Comment utiliser la MISE À JOUR dans SQL : exemples
L’instruction MISE À JOUR met à jour un enregistrement actuel avec les nouvelles informations que vous spécifiez. Par exemple, un client peut déplacer et modifier ses coordonnées dans une table e-commerce, et une déclaration de MISE À JOUR effectuera la modification. Toute modification apportée à une base de données utilisera l’instruction MISE À JOUR.
Il est important de noter que l’optimisation des requêtes réduit la latence de la base de données. Une requête de MISE À JOUR optimisée peut réduire le traitement des données à quelques millisecondes seulement. L’infrastructure est également importante pour une faible latence sur les serveurs de base de données à volume élevé. Pour commencer, utilisez les requêtes suivantes. L’indexation des colonnes fréquemment mises à jour peut contribuer à améliorer les performances. Sur les charges de travail simultanées volumineuses, il peut être nécessaire pour les développeurs de bases de données d’utiliser des niveaux d’isolation pour empêcher les énoncés d’affecter d’autres énoncés également traités.
En revanche, les développeurs et les administrateurs de bases de données doivent gérer les erreurs dans leur code. Ces exemples montrent comment exécuter chaque commande, mais votre logique métier doit déterminer ce qu’il faut faire en cas d’erreur. Par exemple, si la base de données ne parvient pas à insérer un nouveau dossier client, demandez à l’utilisateur de réessayer ou de contacter le service client. La latence, les erreurs et les avertissements d’optimisation des bases de données peuvent être obtenus à l’aide d’outils de surveillance des performances.
MISE À JOUR dans SQL : exemples
Pour la plupart des instructions SQL UPDATE, vous utilisez la clause WHERE. La clause WHERE détermine les dossiers qui seront mis à jour et laisse les autres intacts. Si vous n’utilisez pas de clause WHERE lors de l’exécution d’une instruction UPDATE, la base de données apportera des modifications à tous les enregistrements de la base de données, ce qui est probablement une erreur. Assurez-vous d’avoir une clause WHERE dans votre instruction SQL pour éviter cette erreur.
La syntaxe de l’instruction UPDATE dépend du moteur de base de données utilisé. Les bases de données SQL MySQL et Oracle utilisent une syntaxe similaire pour leurs instructions de MISE À JOUR. Dans les exemples suivants, le prénom d’un client est remplacé par « John », où l’identifiant du client est 44.
MySQL : Commande de MISE À JOUR
|
1 2 3 4 5 |
METTRE À JOUR LE CLIENT SET first_name = « John » OÙ ID = 44 ; |
Oracle SQL : Commande de MISE À JOUR
|
1 2 3 4 5 |
METTRE À JOUR LE CLIENT SET first_name = « John » OÙ ID = 44 ; |
Comment utiliser INSERT dans SQL : exemples
Lorsque vous souhaitez ajouter un nouvel enregistrement à une table, vous utilisez l’instruction INSERT SQL. La plupart des concepteurs de bases de données créent une colonne par défaut pour donner à chaque enregistrement un identifiant unique. L’identifiant unique se remplit automatiquement, vous ne l’insérez donc pas manuellement et vous permettez au moteur de base de données de le faire pour vous. Vous ne pouvez pas insérer de valeurs en double dans les lignes d’identification, il est donc plus efficace de permettre à la base de données de le faire pour vous.
Dans les exemples suivants, un nouveau client est ajouté à la table Client avec un prénom et un nom renseignés dans les colonnes appropriées. Notez que les colonnes sont définies avec les valeurs à ajouter à chaque colonne respectivement.
MySQL : Commande de MISE À JOUR
|
1 2 3 4 5 6 7 |
INSÉRER DANS LE CLIENT (first_name, last_name) VALEURS (« John », « Smith ») Oracle SQL : Commande de MISE À JOUR INSÉRER DANS LE CLIENT (first_name, last_name) VALEURS (« John », « Smith ») |
Comment utiliser UPSERT dans SQL : exemples
La commande UPSERT est utile lorsque vous souhaitez insérer une ligne uniquement si elle n’existe pas déjà. S’il existe déjà, la base de données met à jour l’enregistrement avec de nouvelles informations. Le moteur de base de données Oracle a une commande UPSERT spécifique. Avec MySQL, la commande utilise plutôt le terme REMPLACER.
Les développeurs d’applications utilisent la commande UPSERT pour éviter les enregistrements en double, en particulier lorsqu’ils ont des identifiants uniques qui leur sont associés, et les énoncés d’application ne doivent pas insérer un enregistrement en raison d’un enregistrement existant précédemment. Cela arrive souvent lorsque vous importez des données d’une table à une autre, et il est possible que des enregistrements en double existent. Par exemple, vous obtenez une liste des dossiers clients d’une entreprise acquise et vous savez que certains clients sont déjà dans la base de données professionnelle actuelle. La déclaration UPSERT ne fera que mettre à jour les clients existants et en ajouter de nouveaux là où ils n’existent pas.
MySQL : Commande de MISE À JOUR
|
1 2 3 |
REMPLACER PAR Client (ID, first_name, last_name) VALEURS (44, « John », « Smith ») |
Dans l’exemple ci-dessus, si le client avec un identifiant de 44 existe déjà, l’enregistrement d’origine est supprimé, puis un nouvel enregistrement client avec un identifiant de 44 est ajouté. Il est important de se rappeler que la commande REPLACE ne met pas à jour techniquement les données. Au lieu de cela, il supprime et rajoute une ligne au tableau.
Oracle SQL : Commande de MISE À JOUR
|
1 2 3 |
UPSERT DANS le client (ID, first_name, last_name) VALEURS (44, « John », « Smith ») |
Avec Oracle, la commande UPSERT met à jour le client avec un identifiant de 44 plutôt que de le supprimer et de le rajouter. Si le dossier n’existe pas, le moteur Oracle ajoutera le dossier client à la table.
PostGreSQL : INSÉRER la commande
PostGreSQL n’a pas d’instruction UPSERT spécifique, mais prend en charge un type d’INSERT où le serveur n’insèrera un nouvel enregistrement que s’il n’existe pas déjà. Si l’enregistrement existe, les contraintes de table doivent générer une erreur et effectuer une MISE À JOUR plutôt qu’une instruction INSERT. La syntaxe PostGreSQL est la suivante :
|
1 2 3 4 5 6 7 8 9 10 11 |
INSÉRER DANS les produits (identifiant, nom, prix, quantité) VALEURS (1, ‘WidgetA’, 20,99, 90) EN CONFLIT(ID) METTRE À JOUR prix = EXCLUDED.price, quantité = EXCLUD.quantité ; |
SQL Server : Commande MERGE
Microsoft SQL Server ne prend pas non plus en charge une instruction UPSERT, mais les développeurs peuvent utiliser la commande MERGE pour effectuer une action similaire. L’instruction MERGE prend un jeu de données source et le fusionne avec une table, mais insère uniquement un nouvel enregistrement s’il n’existe pas de ligne. S’il existe une ligne, l’instruction MERGE mettra à jour l’enregistrement.
|
1 2 3 4 5 6 7 |
MERGE Products P UTILISATION DE new_products_source S SUR P.ID=S.ID LORSQUE LA CORRESPONDANCE S‘APPLIQUE METTRE À JOUR LE MONTANT prix=S.price, nom=S.name, quantité=S.quantity ; |
MongoDB : Commande de MISE À JOUR
MongoDB dispose d’un paramètre de commande UPDATE pour indiquer à la base de données d’exécuter une instruction UPSERT. Comme les autres bases de données, MongoDB insère un nouvel enregistrement uniquement s’il n’existe pas. Si elle existe, la base de données s’exécute et se met à jour sur un enregistrement.
|
1 2 3 4 5 6 7 8 9 |
db.products.update( { title: « Red Widget » }, { $inc: { price: 19.00 } }, { upsert: true } ) |
MISE À JOUR et INSERTION : Différences entre SQL
La plupart des applications utilisent plusieurs instructions de MISE À JOUR et d’INSERTION pour gérer les données. Les énoncés INSERT sont nécessaires lorsque vous devez ajouter un dossier. Lorsque vous devez modifier des données déjà stockées, l’instruction MISE À JOUR est nécessaire.
L’instruction INSERT nécessite que toutes les colonnes soient remplies avec les valeurs nécessaires. La déclaration de MISE À JOUR ne nécessite pas la clause WHERE, mais si vous l’excluez, tous les enregistrements sont mis à jour avec les données données données. Il est peu probable que vous souhaitiez mettre à jour tous les enregistrements, alors assurez-vous d’inclure la clause WHERE.
Vous ne pouvez pas utiliser UPDATE à la place de INSERT, mais la déclaration UPSERT est une bonne alternative. Avec l’instruction UPSERT, la base de données met à jour les enregistrements là où ils sont disponibles et les insère dans le tableau si l’enregistrement n’existe pas. INSERT est plus rapide qu’une déclaration de MISE À JOUR, à condition qu’une base de données soit correctement optimisée.
UPSERT vs. MISE À JOUR et INSERTION : quel est le meilleur système ?
L’énoncé que vous utilisez dépend de ce que vous souhaitez faire des données de votre base de données. Pour des raisons de performance, INSERT est préférable à UPSERT, mais vous ne pouvez pas toujours éviter d’utiliser une déclaration de MISE À JOUR et vous devez disposer d’un moyen de vérifier que le dossier n’existe pas déjà. L’instruction UPSERT simplifie l’ensemble du processus au lieu d’écrire une instruction IF plus longue dans une procédure stockée. Lorsque vous avez des mises à jour importantes ou que vous insérez des énoncés pour importer des données et que vous ne souhaitez pas de doublons, l’énoncé UPSERT est plus performant. Vous effectuez à la fois la MISE À JOUR et l’INSERTION en une seule action.
Quand utiliser la MISE À JOUR dans SQL
La seule façon de modifier les données d’une table de base de données est avec l’instruction UPDATE. Les applications modifient constamment les données pour diverses raisons, et elles utilisent des instructions SQL UPDATE dans le backend. Lorsque vous modifiez vos coordonnées, vos données de carte de crédit ou l’adresse de livraison d’un compte en ligne, il est probable que le système d’application backend exécute un relevé de MISE À JOUR.
Utilisez l’option MISE À JOUR lorsque vous n’avez qu’à modifier les données et que les doublons ne sont pas un problème. Une simple instruction de MISE À JOUR n’est pas lente, mais plus le nombre de colonnes et de lignes à modifier peut ralentir les services de base de données. Il peut être utile d’effectuer une déclaration de MISE À JOUR de lots volumineux pendant les heures creuses.
Quand utiliser INSERT dans SQL
Vous avez besoin de l’instruction INSERT lorsque vous souhaitez ajouter un enregistrement à une table. Chaque fois que vous vous inscrivez à une application ou que vous commandez un nouveau produit dans un magasin d’e-commerce, la base de données backend utilise l’instruction INSERT SQL pour ajouter un nouvel enregistrement à la base de données. Le nouvel enregistrement peut être modifié ultérieurement avec la déclaration de MISE À JOUR, mais il a d’abord été créé avec la déclaration INSERT.
Les énoncés INSERT sont généralement rapides. Lorsque vous devez ajouter un enregistrement, cela est inévitable. Comme les instructions de MISE À JOUR, les gros inserts (comme l’importation de données à partir d’un fichier statique) peuvent être mieux optimisés s’ils s’exécutent pendant les heures creuses. Les fichiers journaux pour l’audit et la journalisation utilisent des instructions simples INSERT.
Quand utiliser UPSERT dans SQL
L’instruction UPSERT présente la performance la moins élevée des trois commandes, mais elle a un but lorsque vous avez plusieurs enregistrements à ajouter à une table et que vous ne souhaitez pas les dupliquer. Lorsque vous importez des données dans une table et que vous pensez qu’il pourrait y avoir des enregistrements en double, utilisez l’instruction UPSERT pour mettre à jour les enregistrements actuels au lieu d’en ajouter des doublons. Par exemple, si vous devez importer des clients à partir d’un fichier externe dans vos tables de base de données, une instruction UPSERT peut être plus appropriée que l’utilisation d’une instruction INSERT.
Les déclarations UPSERT sont généralement bénéfiques si vous disposez d’un vaste jeu de données source qui pourrait avoir des doublons. Par exemple, vous ne voudriez pas dupliquer un tableau de produits, vous utiliseriez donc UPSERT au lieu d’utiliser une seule instruction INSERT et de supprimer les doublons ultérieurement. UPSERT est idéal lorsque vous disposez de gros volumes de données, mais peut entraîner des problèmes de latence si elles sont utilisées pour toutes les déclarations INSERT inutilement. Utilisez uniquement UPSERT lorsque vous pouvez importer des doublons dans une table principale.
FAQ
Découvrir Distinct Vs. Unique en SQL
Maintenant que vous savez quand utiliser les fonctions UPDATE, INSERT et UPSERT, passez à l’étape suivante et précisez en quoi DISTINCT et UNIQUE diffèrent lorsque vous devez contrôler les valeurs en double au moment de la requête.






