Jusqu'à présent, nous nous sommes concentrés sur la récupération de données à l'aide de la commande SELECT. Nous allons maintenant explorer le langage de manipulation de données (DML), en commençant par l'ajout de nouvelles données dans vos tables avec la commande INSERT INTO.
Il existe deux façons principales d'utiliser la commande INSERT INTO.
C'est la méthode la plus sûre et la plus courante. Vous listez explicitement les colonnes à remplir, suivies des valeurs correspondantes.
INSERT INTO table_name (column1, column2, column3)
VALUES (value1, value2, value3);
Si vous fournissez des valeurs pour toutes les colonnes de la table dans l'ordre exact de leur définition, vous pouvez omettre les noms de colonnes. Cette méthode est moins flexible et peut provoquer des erreurs si la structure de la table change.
INSERT INTO table_name
VALUES (value1, value2, value3, ...);
WHERE, les valeurs de type texte ou date doivent être entourées de guillemets simples (').NULL et que vous ne fournissez pas de valeur, elle sera remplie par NULL (ou une valeur par défaut si définie).Ajoutons un nouvel acteur dans la table actor de la base Sakila.
INSERT INTO actor (first_name, last_name)
VALUES ('JOHNNY', 'DEPP');
Remarque : Nous n'avons pas spécifié actor_id car il est généralement généré automatiquement par la base.
Si une table possède de nombreuses colonnes mais que vous souhaitez n'en remplir que quelques-unes :
INSERT INTO customer (first_name, last_name, email, store_id, address_id)
VALUES ('ALICE', 'JOHNSON', 'alice.j@example.com', 1, 5);
La plupart des bases modernes permettent d'insérer plusieurs lignes en une seule commande, en séparant les ensembles de valeurs par des virgules.
INSERT INTO actor (first_name, last_name)
VALUES
('TOM', 'HANKS'),
('MERYL', 'STREEP'),
('LEONARDO', 'DICAPRIO');
INSERT INTO ... SELECT)Parfois, vous n'avez pas besoin de saisir les données manuellement, mais plutôt de les transférer d'une table à une autre (par exemple, lors de l'archivage ou de la génération de rapports). Pour cela, on utilise une combinaison de INSERT INTO et SELECT.
INSERT INTO target_table (column1, column2, column3)
SELECT source_column1, source_column2, source_column3
FROM source_table
WHERE condition;
Une caractéristique importante de cette commande est que dans le bloc SELECT, vous pouvez combiner différents types de valeurs :
source_column1).amount * 0.1).Supposons que nous ayons une table customer_archive et que nous souhaitions y transférer des données de la table principale customer, en ajoutant la date d'archivage et une note de statut :
INSERT INTO customer_archive (customer_id, full_name, archived_at, status_note)
SELECT
customer_id,
CONCAT(first_name, ' ', last_name), -- Valeur calculée (Nom Complet)
CURRENT_DATE, -- Constante (date actuelle)
'Auto-archived' -- Constante (étiquette texte)
FROM customer
WHERE active = 0;
Remarque : Le nombre et l'ordre des colonnes dans INSERT INTO doivent correspondre strictement au nombre et à l'ordre des colonnes renvoyées dans le SELECT.
Lors de l'insertion d'une ligne, il n'est pas toujours nécessaire de fournir une valeur pour chaque colonne. La base de données gère les valeurs manquantes de deux façons : via NULL et via les valeurs par défaut des colonnes.
Si une colonne accepte NULL, vous pouvez passer le mot-clé NULL directement comme valeur :
INSERT INTO customer (first_name, last_name, email, store_id, address_id)
VALUES ('BOB', 'SMITH', NULL, 1, 5);
Ici, la colonne email sera stockée avec la valeur NULL, ce qui signifie « aucune valeur connue ».
Si une colonne possède une valeur DEFAULT définie dans le schéma de la table, vous pouvez l'omettre entièrement de la liste des colonnes. La base de données la remplira automatiquement :
INSERT INTO actor (first_name, last_name)
VALUES ('CATE', 'BLANCHETT');
Les colonnes comme actor_id (auto-incrément) et last_update (horodatage par défaut) sont remplies par la base de données sans aucune saisie explicite.
Vous pouvez également utiliser le mot-clé DEFAULT pour déclencher la valeur par défaut d'une colonne tout en la maintenant dans la liste :
INSERT INTO actor (actor_id, first_name, last_name, last_update)
VALUES (DEFAULT, 'CATE', 'BLANCHETT', DEFAULT);
C'est utile lorsque votre instruction liste toutes les colonnes mais que vous souhaitez que la base de données en gère certaines.
Points clés de cette leçon :
INSERT INTO permet d'ajouter de nouvelles lignes dans une table.INSERT INTO ... SELECT permet de copier des données d'une table à une autre.SELECT, vous pouvez combiner des données réelles de la table, des champs calculés et des constantes.NULL ou ayant une valeur DEFAULT peuvent être omises ou transmises explicitement à l'aide des mots-clés NULL et DEFAULT.Dans la prochaine leçon, nous verrons comment modifier des enregistrements existants avec la commande UPDATE.