Retour à la liste des articles Articles
8 minutes de lecture

Qu'est-ce que l'instruction UPDATE en SQL ?

L'instruction SQL UPDATE est utilisée pour mettre à jour des données existantes dans votre base de données. Cet article explique sa syntaxe et vous montre des exemples clairs de l'instruction UPDATE en action.

La mise à jour efficace des données existantes dans une base de données est nécessaire pour toute personne utilisant SQL ; les données ne sont utiles que si elles sont maintenues à jour et pertinentes.

Dans cet article, nous allons examiner en détail la syntaxe de l'instruction UPDATE. Puis nous nous plongerons dans des exemples détaillés, étape par étape, qui vous feront comprendre les règles, les utilisations potentielles et les limites associées à l'instruction SQL UPDATE.

Qu'est-ce que l'instruction UPDATE ?

En SQL, l'instruction UPDATE est utilisée pour modifier ou mettre à jour les enregistrements existants dans une table. Vous pouvez l'utiliser pour tout mettre à jour en une seule fois, ou vous pouvez spécifier un sous-ensemble d'enregistrements à modifier à l'aide de la clause WHERE.

L'instruction UPDATE est considérée comme une commande de manipulation de données SQL. Les autres commandes sont INSERT et DELETE, que vous pouvez découvrir dans le cours Comment INSÉRER, METTRE À JOUR ou SUPPRIMER des données en SQL de LearnSQL.fr.

Voyons maintenant la syntaxe de la commande SQL UPDATE.

Syntaxe SQL UPDATE

La syntaxe de l'instruction UPDATE est la suivante :

UPDATE <table>
SET <column1> = <value1>,
        <column2> = <value2>,
        …
[WHERE <conditions>]

Décomposons cette syntaxe.

Le nom de la table suit directement l'instruction UPDATE elle-même : UPDATE <table>.

Vous pouvez spécifier les colonnes que vous souhaitez mettre à jour à l'aide du mot-clé SET. Notez que lorsque vous définissez les valeurs de vos colonnes, vous devez utiliser le type de données correct. Examinons un exemple de requête SQL qui le démontre.

UPDATE employee
SET 	id = 1,
   	first_name = 'John'

Lorsque vous définissez la valeur de la colonne id, aucun guillemet n'est nécessaire. En revanche, pour définir la valeur de la colonne first_name, vous devez transmettre une valeur de type chaîne de caractères, c'est-à-dire en plaçant le texte entre guillemets simples.

La dernière partie de la syntaxe est l'inclusion facultative de la clause WHERE. Bien qu'elle soit facultative, j'inclus généralement toujours WHERE dans mes déclarations UPDATE. Si vous n'incluez pas une clause WHERE pour spécifier l'enregistrement exact à modifier, vous mettrez à jour toutes les valeurs de cette colonne.

Prenons un exemple pour illustrer ce point. Nous avons deux requêtes presque identiques ; la différence est que l'une utilise WHERE et l'autre pas :

Query 1 - Without WHEREQuery 2 - With WHERE
UPDATE employee
	SET first_name = 'John'
UPDATE employee
	SET first_name = 'John'
	WHERE id = 1

La requête 1 met à jour le prénom de chaque employé en le remplaçant par John - vous ne voulez probablement pas que cela se produise !

La requête 2 met à jour le nom d'un employé en John : celui dont le id est égal à 1. C'est probablement ce que vous espérez obtenir.

Une bonne pratique consiste à utiliser SELECT pour afficher les enregistrements avant de les mettre à jour. Par exemple, vous pouvez écrire cette requête :

SELECT *
FROM employee
WHERE id = 1

Si l'enregistrement renvoyé est bien celui que vous souhaitez modifier, vous pouvez utiliser la même clause WHERE pour votre déclaration UPDATE. Cela vous permet de ne pas modifier accidentellement d'autres enregistrements.

Voilà qui conclut notre étude de la syntaxe SQL UPDATE. Il est maintenant temps d'examiner quelques exemples pratiques qui illustrent différentes utilisations de l'instruction UPDATE. Nous aborderons également certains problèmes de permission que vous pourriez rencontrer.

Autorisations de l'instruction SQL UPDATE

Avant notre prochain exemple, parlons des autorisations. Il est important de noter que, selon le dialecte SQL que vous utilisez, vous devrez peut-être modifier les autorisations pour pouvoir modifier les enregistrements directement avec l'instruction UPDATE.

Par exemple, dans MySQL, vous rencontrerez le message suivant : "Vous utilisez le mode de mise à jour sécurisé et vous avez essayé de mettre à jour une table sans WHERE qui utilise une colonne KEY. Pour désactiver le mode sécurisé, basculez l'option dans Préférences -> Éditeur SQL et reconnectez-vous".

Pour résoudre ce problème, vous avez deux options.

  1. Modifiez vos paramètres :
    1. Allez dans Éditer →
    2. Cliquez sur l'onglet Éditeur SQL et décochez la case Mises à jour sécurisées.
    3. Cliquez sur Requête → Reconnexion au serveur.
    4. Exécutez votre requête SQL.
  2. Exécutez la requête suivante :
    SET SQL_SAFE_UPDATES = 0;

Après avoir complété l'une ou l'autre de ces options, vous devriez être en mesure d'utiliser UPDATE pour modifier les données d'une table.

Utilisation de UPDATE sur des colonnes

Imaginons que nous ayons une table contenant le nom et l'âge des employés d'une entreprise. La table de la base de données est censée être automatiquement mise à jour par le système RH connecté, mais en examinant la table, vous constatez que certains âges sont dépassés. Vous décidez que la meilleure solution est d'utiliser l'instruction SQL UPDATE pour mettre à jour manuellement l'âge des employés concernés.

Tout d'abord, regardons la table employees table :

employee_idfirst_namelast_nameage
1JohnSmith23
2MaryConway54
3PaulJohnson33
4SandraCruz28
5JacobWard40
6StaceyTuite65
7ThomasRice43

Vous pouvez constater que chaque ligne contient un identifiant unique pour l'employé, ainsi que les adresses first_name, last_name et age.

Les employés que nous devons mettre à jour sont Paul Johnson et Jacob Ward.

Commençons par mettre à jour l'âge de ces employés :

UPDATE employees
SET age = 34
WHERE employee_id = 3;

Ok, cette requête devrait le faire. La valeur 3 de employee_id correspond à Paul Johnson. Il n'y a qu'une seule occurrence de 3 dans la colonne employee_id, donc cette requête ne mettra pas à jour d'autres enregistrements. Exécutez la requête et utilisez la requête suivante SELECT pour afficher les résultats :

SELECT employee_id, first_name, last_name, age
FROM employees
WHERE employee_id = 3;
employee_idfirst_namelast_nameage
3PaulJohnson34

L'âge a été mis à jour avec succès !

Pour notre prochain employé, nous allons mettre à jour son âge en utilisant ses first_name et last_name dans la clause WHERE. Tant qu'il n'y a pas deux employés avec le même prénom et le même nom de famille, cela fonctionnera comme nous le souhaitons :

UPDATE employees
SET age = 41
WHERE first_name = 'Jacob' AND last_name = 'Ward'

Cela devrait suffire ! Exécutez la requête puis utilisez cette déclaration SELECT pour afficher le résultat :

SELECT employee_id, first_name, last_name, age
FROM employees
WHERE first_name = 'Jacob' AND last_name = 'Ward'
employee_idfirst_namelast_nameage
5JacobWard41

C'est exactement ce que nous voulions ! Pour d'autres exemples de ce type, consultez cet article sur l'utilisation des sous-requêtes avec INSERT, UPDATE et DELETE.

Voyons maintenant un exemple plus avancé : nous allons mettre à jour une table en utilisant les données d'une autre table.

Mise à jour d'une table avec les données d'une autre table

Imaginez un scénario où quelqu'un mettrait à jour des enregistrements dans la table employees et a commis une erreur ! Il a accidentellement défini les 5 premières lignes comme ayant le prénom "John". La table employees tableau ressemble maintenant à ceci :

employee_idfirst_namelast_nameage
1JohnSmith23
2JohnConway54
3JohnJohnson33
4JohnCruz28
5JohnWard40
6StaceyTuite65
7ThomasRice43

Comment réparer cela ? Heureusement, nous avons une table de sauvegarde qui n'a pas été affectée par l'erreur du développeur. Cette table s'appelle employees_backup et ressemble à ceci :

employee_idfirst_namelast_nameage
1JohnSmith23
2MaryConway54
3PaulJohnson34
4SandraCruz28
5JacobWard41
6StaceyTuite65
7ThomasRice43

Rédigeons une requête qui met à jour les valeurs incorrectes des employés avec les valeurs correctes de la table de sauvegarde. Lorsque vous mettez à jour plusieurs lignes, cela implique généralement beaucoup de travail manuel. Cette requête est conçue pour réduire ce travail répétitif :

SET first_name = (SELECT first_name
                  FROM employees_backup
                  WHERE employees_backup.last_name = employees.last_name)
WHERE employee_id < 6;

Décomposons cela. Vous pouvez voir que la seule colonne que nous voulons modifier est first_name, mais uniquement lorsque employee_id de cet enregistrement est inférieur à 6. Cela s'explique par le fait que l'erreur du développeur n'a affecté que les 5 premiers enregistrements de la table.

Nous sélectionnons ensuite les valeurs de la colonne first_name du tableau, en faisant correspondre les employés à leur nom de famille. employees_backup en faisant correspondre les employés à leur nom de famille. C'est ainsi que nous nous assurons que le bon prénom est donné à chaque employé.

Il s'agit d'un scénario utile à garder à l'esprit ; une situation similaire peut se produire lorsque vous travaillez avec des bases de données. Une bonne maîtrise de l'instruction SQL UPDATE vous permet de corriger facilement vos erreurs.

Obtenez un contrôle total sur vos données avec SQL UPDATE

Voilà qui conclut notre article sur SQL UPDATE. Nous avons abordé la syntaxe et les autorisations nécessaires pour utiliser l'instruction UPDATE. Nous avons examiné quelques exemples pratiques - des cas simples ainsi que des scénarios plus avancés comme l'utilisation de données provenant d'une autre table.

Nous avons également mentionné que INSERT est l'un des moyens de modifier les données de vos tables. Les autres commandes permettant de modifier les données sont INSERT et DELETE. Pour en savoir plus, consultez cet article de blog sur les commandes INSERT, UPDATE et DELETE.