Chapitre 6. Manipulation de données

Table des matières
6.1. Insérer des données
6.2. Modifier des données
6.3. Supprimer des données

Le chapitre précédent expliquait comment créer des tables et d'autres structures pour stocker vos données. Nous allons maintenant remplir ces tables avec des données. Ce chapitre montre comment insérer, mettre à jour et supprimer des données des tables. Nous allons aussi montrer des méthodes pour effectuer des changements automatiquement dans les données quand certains événements ont lieu : les déclencheurs et les règles de réécriture. Le chapitre suivant expliquera enfin comment extraire des données perdues depuis longtemps dans la base de données.

6.1. Insérer des données

Quand une table est créée, elle ne contient aucune donnée. La première chose à faire, c'est d'y insérer des données. Sinon, la base de données n'est pas d'une grande utilité. Les données sont insérées ligne par ligne. Bien sûr, il est possible d'insérer plus d'une ligne mais il n'est pas possible d'entrer moins qu'une ligne à la fois. Même si vous ne connaissez les valeurs que pour quelques colonnes, une ligne complète doit être créée.

Pour créer une nouvelle ligne, utilisez la commande INSERT. La commande a besoin du nom de la table et d'une valeur pour chaque colonne de cette table. Par exemple, utilisons produits, la table des produits de Chapitre 5 :

CREATE TABLE produits (
    no_produit integer,
    nom text,
    prix numeric
);

Un exemple de commande pour insérer une ligne serait :

INSERT INTO produits VALUES (1, 'Fromage', 9.99);

Les données sont listées dans l'ordre dans lequel les colonnes apparaissent dans la table, séparées par des virgules. Souvent, les données sont des littéraux (constantes) mais les expressions scalaires sont aussi acceptées.

La syntaxe précédente a le défaut qu'il faut connaître l'ordre des colonnes. Pour éviter ce problème, vous pouvez aussi lister les colonnes explicitement. Par exemple, les deux commandes suivantes ont le même effet que la précédente :

INSERT INTO produits (no_produit, nom, prix) VALUES (1, 'Fromage', 9.99);
INSERT INTO produits (nom, prix, no_produit) VALUES ('Fromage', 9.99, 1);

Beaucoup d'utilisateurs recommandent de toujours lister les noms de colonnes.

Si vous ne connaissez pas les valeurs de certaines colonnes, vous pouvez les omettre. Dans ce cas, elles seront remplies avec leur valeur par défaut. Par exemple,

INSERT INTO produits (no_produit, nom) VALUES (1, 'Fromage');
INSERT INTO produits VALUES (1, 'Fromage');

La seconde instruction est une extension de PostgreSQL. Elle remplit les colonnes de gauche à droite avec toutes les valeurs données, et les autres prennent leur valeur par défaut.

Pour plus de clarté, vous pouvez aussi explicitement demander les valeurs par défaut pour des colonnes spécifiques ou pour la ligne complète.

INSERT INTO produits (no_produit, nom, prix) VALUES (1, 'Fromage', DEFAULT);
INSERT INTO produits DEFAULT VALUES;

Astuce : Pour faire des chargements en masse (insertion de grandes quantités de données), jetez un œil à la commande COPY. Elle n'est pas aussi souple que la commande INSERT mais elle est plus efficace.