Décodage de la commande SQL UPDATE

Apprenez à utiliser la commande SQL UPDATE pour mettre à jour des enregistrements dans une table de base de données.

En tant que développeur, vous devez être à l’aise avec les bases de données relationnelles. SQL (ou Structured Query Language) est un langage convivial pour les débutants, intuitif à apprendre et doté d’une syntaxe simple. SQL vous permet de créer des objets de base de données et d’interroger des tables de bases de données relationnelles.

Vous pouvez exécuter des requêtes SQL pour créer, lire, mettre à jour et supprimer des enregistrements dans une table de base de données. Vous savez peut-être que ces opérations sont collectivement appelées opérations CRUD.

Pour mettre à jour les enregistrements stockés dans une table de base de données, vous pouvez exécuter la commande UPDATE dans SQL.

Dans ce didacticiel, vous apprendrez :

  • La syntaxe de la commande UPDATE
  • Comment mettre à jour des enregistrements en fonction d’une condition spécifique ou de plusieurs conditions enchaînées à l’aide d’opérateurs logiques
  • Mise en garde commune à prendre en compte lors de l’exécution de la commande SQL UPDATE

Syntaxe de la commande SQL UPDATE

La syntaxe de la commande SQL UPDATE est :

UPDATE table_name
SET column = new_value
WHERE condition;

La requête ci-dessus met à jour la colonne pour tous les enregistrements où la condition est vraie.

Pour mettre à jour plusieurs colonnes (ou champs), utilisez la commande SQL UPDATE comme suit :

UPDATE table_name
SET column_1 = new_value_1, column_2 = new_value_2, ..., column_k = new_value_k
WHERE condition;

Rappelons que dans une base de données relationnelle :

  • Le tableau représente une entité.
  • Les lignes du tableau sont les enregistrements et représentent une instance de l’entité.
  • Les colonnes sont également appelées champs ou attributs. Dans ce didacticiel, nous utiliserons indifféremment les colonnes et les champs.

Exemples d’utilisation de la commande SQL UPDATE

Prenons maintenant quelques exemples.

Conditions préalables

Avant de commencer à coder :

  • Ce tutoriel utilise SQLite. Vous aurez donc besoin d’avoir SQLite et Navigateur de base de données SQLite (recommandé) pour coder en même temps. Notez que vous pouvez également utiliser MySQL ou PostgreSQL.
  • Si vous souhaitez reproduire l’exemple, vous avez besoin de Python et de Paquet Faker Python aussi.

Création d’une table de base de données avec des enregistrements

Si vous souhaitez coder avec ce didacticiel, vous pouvez exécuter l’extrait de code suivant pour créer et vous connecter à une base de données client customer_db.db. Notez que nous utilisons la bibliothèque Faker Python pour générer des données synthétiques à insérer dans la table clients :

# main.py

import sqlite3
from faker import Faker
import random

# connect to the db
conn = sqlite3.connect('customer_db.db')
cur = conn.cur()

# create a database table
cur.execute('''CREATE TABLE customers (
                  customerID INTEGER PRIMARY KEY,
                  name TEXT,
                  city TEXT,
                  email TEXT,
                  num_orders INTEGER,
                  discount INTEGER DEFAULT 2)''')


# create a Faker object 
fake = Faker()
Faker.seed(42)

for _ in range(15):
    name = fake.name()
    city = fake.city()
    d = fake.domain_name()
    email = f"{name[:2]}.{city[:2]}@{d}"
    num_orders = random.choice(range(200))
    db_cursor.execute('INSERT INTO customers (name, city, email, num_orders) 
    VALUES (?,?,?,?)', (name,city,email,num_orders))

# commit the transaction 
conn.commit()
cur.close()
conn.close()

📑 Pour que ce code fonctionne sans erreur, assurez-vous d’avoir Python 3.7 (ou une version ultérieure) et Faux installé dans votre environnement de développement. Vous pouvez installer le package Faker Python en utilisant pip :

pip install faker

Si vous disposez déjà d’une base de données à laquelle vous pouvez vous connecter et d’une table de base de données que vous pouvez interroger, vous pouvez également l’utiliser selon vos préférences.

Exécution de notre première requête SQL

La table des clients contient les champs suivants :

  • customerID : le customerID est la clé primaire qui nous aide à identifier de manière unique un enregistrement dans une table de base de données.
  • name : Le nom du client
  • city ​​: La ville à laquelle ils appartiennent.
  • email : Son adresse email.
  • num_orders : le nombre de commandes passées.
  • remise : Le pourcentage de remise, un entier avec une valeur par défaut de 2. Comme le champ de remise a une valeur par défaut, nous n’avons pas besoin d’insérer une valeur lors du remplissage de la table de base de données.

📝 Vous pouvez exécuter les requêtes et afficher les résultats à l’aide du client de ligne de commande SQLite. Ou vous pouvez utiliser le navigateur de base de données SQLite.

Je présenterai les sorties du navigateur SQLite DB car elles sont faciles à interpréter.

Exécutez la requête suivante pour obtenir tous les enregistrements de la table clients :

SELECT * FROM customers;

En pratique, vous devriez éviter d’utiliser SELECT * sauf si c’est nécessaire. Mais pour cet exemple, nous l’utiliserons car nous n’avons que 15 enregistrements et peu de champs.

Mise à jour des enregistrements en fonction d’une seule condition

Maintenant que nous savons à quoi ressemble notre table, exécutons quelques requêtes UPDATE pour mettre à jour les enregistrements en fonction de la condition requise.

📋 Remarque : Après avoir exécuté les instructions UPDATE, nous exécuterons SELECT * FROM clients pour voir les enregistrements mis à jour.

Mise à jour d’un seul champ

Tout d’abord, mettons à jour le champ ville de l’enregistrement avec customerID=7 :

UPDATE customers
SET city='Codeshire'
WHERE customerID=7;

Sélectionnons toutes les colonnes et tous les enregistrements de la table clients :

SELECT * FROM customers;

Nous voyons que le champ ville de Danielle Ford (customerID=7) a été mis à jour.

Mise à jour de plusieurs champs

Dans l’exemple précédent, nous avons mis à jour un seul champ, à savoir la ville de l’enregistrement correspondant au customerID 7. Mais nous pouvons également mettre à jour plusieurs champs en utilisant la syntaxe que nous avons apprise.

Ici, nous mettons à jour à la fois la ville et le champ e-mail correspondant au customerID 1 :

UPDATE customers
SET city='East Carlisle',email="[email protected]"
WHERE customerID=1;

Ensuite, nous exécutons:

SELECT * FROM customers;

Et voici la sortie :

Mise à jour de plusieurs enregistrements

Étant donné que nous avons utilisé le customerID qui est la clé primaire qui identifie de manière unique un enregistrement client, les requêtes que nous avons exécutées jusqu’à présent n’ont mis à jour qu’un seul des enregistrements.

Toutefois, si la condition est vraie pour plusieurs enregistrements de la table, l’exécution de la commande de mise à jour SQL met à jour tous les enregistrements correspondants.

Prenez cette requête par exemple :

UPDATE customers 
SET discount=10
WHERE num_orders > 170;

Exécutez maintenant cette requête :

SELECT * FROM customers;

Voici la sortie :

L’exécution de la commande de mise à jour SQL ci-dessus modifie trois enregistrements. Ils ont tous un nombre de commandes supérieur à 170 et ont maintenant une valeur de remise de 10.

Mise à jour des enregistrements en fonction de plusieurs conditions

Jusqu’à présent, la clause WHERE avait une condition simple, mais il est courant que le critère de filtrage ait plusieurs conditions enchaînées par des opérateurs logiques.

Pour comprendre cela, fixons la remise à 5 en fonction de deux conditions :

  • city ​​LIKE ‘New%’ : cette condition vérifie et inclut les enregistrements où le champ city commence par New, et
  • num_orders > 100 filtres basés sur le nombre de commandes pour inclure uniquement les enregistrements pour lesquels le nombre de commandes est supérieur à 100.

L’instruction UPDATE ressemble à ceci :

UPDATE customers
SET DISCOUNT=5
WHERE city LIKE 'New%' AND num_orders>100;

Notez que nous avons maintenant deux conditions dans la clause WHERE, enchaînées par l’opérateur logique AND. Et seuls les enregistrements pour lesquels les deux conditions sont vraies sont mis à jour.

Exécutez ensuite cette requête et observez le résultat :

SELECT * FROM customers;

Comme indiqué dans la sortie, le champ de remise pour les enregistrements pour lesquels les deux conditions ci-dessus sont vraies est mis à jour :

Avertissement courant lors de l’utilisation de la commande SQL UPDATE

Dans toutes les instructions UPDATE exécutées jusqu’à présent, nous avons inclus la clause WHERE.

Par exemple, vous souhaitez mettre à jour la remise à 25 pour un client particulier. Et dans votre requête de mise à jour, vous oubliez d’inclure la clause WHERE avec le customerID pour filtrer :

UPDATE customers
SET DISCOUNT=25;

Exécutez maintenant :

SELECT * FROM customers;

Vous verrez que tous les enregistrements de la table sont mis à jour. Ce n’est peut-être pas le comportement que vous souhaiteriez.

⚠ Pensez donc à inclure la clause WHERE lorsque vous souhaitez mettre à jour un sous-ensemble d’enregistrements en fonction d’une condition. Si vous souhaitez mettre à jour un champ particulier pour tous les enregistrements, vous pouvez omettre la clause WHERE.

Dans cet exemple, supposons que la vente du Black Friday approche et que vous souhaitiez offrir à tous vos clients une remise de 25 %. Ensuite, exécuter la requête ci-dessus aura du sens.

Conclusion

Voici un résumé de ce que vous avez appris :

  • Lorsque vous souhaitez mettre à jour des enregistrements dans une table de base de données, vous pouvez utiliser la commande SQL UPDATE.
  • L’instruction SQL UPDATE inclut généralement la clause WHERE avec la condition qui détermine le sous-ensemble d’enregistrements (lignes de la table) à mettre à jour.
  • L’omission de la clause WHERE dans l’instruction UPDATE met à jour tous les enregistrements. Vous devez donc faire attention à ne pas omettre la clause WHERE si la mise à jour de toutes les lignes de la table n’est pas le comportement souhaité.

Ensuite, consultez cette feuille de triche SQL pour une référence rapide.