root/traduc/branches/bv747/manuel/dml.sgml

Revision 13, 9.5 kB (checked in by gleu, 3 years ago)

Suite de l'import pour le passage CVS à SVN.

Line 
1 <!-- $Header: /var/lib/cvs/pgsql-fr/sgml/dml.sgml,v 1.6.2.1 2005/03/20 22:34:39 guillaume Exp $ -->
2
3 <chapter id="dml">
4  <title>Manipulation de données</title>
5
6  <comment>
7   Ce chapitre est toujours assez incomplet.
8  </comment>
9
10  <para>
11   Le chapitre précédent expliquait comment créer des tables et
12   d'autres structures pour stocker vos données. Nous allons maintenant remplir
13   ces tables avec des données. Ce chapitre montre comment insérer,
14   mettre à jour et supprimer des données des tables.
15   Nous allons aussi montrer des méthodes pour effectuer des changements
16   automatiquement dans les données quand certains événements ont lieu&nbsp;:
17   les déclencheurs et les règles de réécriture. Le chapitre suivant expliquera
18   enfin comment extraire des données perdues depuis longtemps dans la base de
19   données.
20  </para>
21
22  <sect1 id="dml-insert">
23   <title>Insérer des données</title>
24
25   <indexterm zone="dml-insert">
26    <primary>insertion</primary>
27   </indexterm>
28
29   <indexterm zone="dml-insert">
30    <primary>INSERT</primary>
31   </indexterm>
32
33   <para>
34    Quand une table est créée, elle ne contient aucune donnée.
35    La première chose à faire, c'est d'y insérer des données. Sinon,
36    la base de données n'est pas d'une grande utilité.
37    Les données sont insérées ligne par ligne. Bien sûr, il est possible
38    d'insérer plus d'une ligne mais il n'est pas possible d'entrer moins
39    qu'une ligne à la fois. Même si vous ne connaissez les valeurs que
40    pour quelques colonnes, une ligne complète doit être créée.
41   </para>
42
43   <para>
44    Pour créer une nouvelle ligne, utilisez la commande
45    <literal>INSERT</literal>.
46    La commande a besoin du nom de la table et d'une valeur pour
47    chaque colonne de cette table.
48    Par exemple, utilisons produits, la table des produits
49    de <xref linkend="ddl">&nbsp;:
50 <programlisting>
51 CREATE TABLE produits (
52     no_produit integer,
53     nom text,
54     prix numeric
55 );
56 </programlisting>
57    Un exemple de commande pour insérer une ligne serait&nbsp;:
58 <programlisting>
59 INSERT INTO produits VALUES (1, 'Fromage', 9.99);
60 </programlisting>
61    Les données sont listées dans l'ordre dans lequel les colonnes
62    apparaissent dans la table, séparées par des virgules. Souvent, les
63    données sont des littéraux (constantes) mais les expressions
64    scalaires sont aussi acceptées.
65   </para>
66
67   <para>
68    La syntaxe précédente a le défaut qu'il faut connaître l'ordre des colonnes.
69    Pour éviter ce problème, vous pouvez aussi lister les colonnes explicitement.
70    Par exemple, les deux commandes suivantes ont le même effet que la
71    précédente&nbsp;:
72 <programlisting>
73 INSERT INTO produits (no_produit, nom, prix) VALUES (1, 'Fromage', 9.99);
74 INSERT INTO produits (nom, prix, no_produit) VALUES ('Fromage', 9.99, 1);
75 </programlisting>
76    Beaucoup d'utilisateurs recommandent de toujours lister les noms de colonnes.
77   </para>
78
79   <para>
80    Si vous ne connaissez pas les valeurs de certaines colonnes,
81    vous pouvez les omettre. Dans ce cas, elles seront remplies avec leur
82    valeur par défaut. Par exemple,
83 <programlisting>
84 INSERT INTO produits (no_produit, nom) VALUES (1, 'Fromage');
85 INSERT INTO produits VALUES (1, 'Fromage');
86 </programlisting>
87    La seconde instruction est une extension de
88    <productname>PostgreSQL</productname>. Elle remplit les colonnes de
89    gauche à droite avec toutes les valeurs données, et les autres prennent
90    leur valeur par défaut.
91   </para>
92
93   <para>
94    Pour plus de clarté, vous pouvez aussi explicitement demander les valeurs
95    par défaut pour des colonnes spécifiques ou pour la ligne complète.
96 <programlisting>
97 INSERT INTO produits (no_produit, nom, prix) VALUES (1, 'Fromage', DEFAULT);
98 INSERT INTO produits DEFAULT VALUES;
99 </programlisting>
100   </para>
101
102   <tip>
103    <para>
104     Pour faire des chargements en masse (insertion de grandes quantités
105     de données), jetez un &oelig;il à la commande <xref linkend="sql-copy"
106     endterm="sql-copy-title">. Elle n'est pas aussi souple que la
107     commande <command>INSERT</command> mais elle est plus efficace.
108    </para>
109   </tip>
110  </sect1>
111
112  <sect1 id="dml-update">
113   <title>Modifier des données</title>
114
115   <indexterm zone="dml-update">
116    <primary>modification</primary>
117   </indexterm>
118
119   <indexterm zone="dml-update">
120    <primary>UPDATE</primary>
121   </indexterm>
122
123   <para>
124    La modification de données déjà présentes dans la base est
125    appelée mise à jour (update en anglais).
126    Vous pouvez mettre à jour une ligne spécifique, toutes
127    les lignes d'une table ou un sous-ensemble des lignes
128    de la table. Chaque colonne peut être mise à jour séparément&nbsp;;
129    les autres colonnes ne sont pas modifiées.
130   </para>
131
132   <para>
133    Pour faire une mise à jour, il faut trois informations&nbsp;:
134    <orderedlist spacing=compact>
135     <listitem>
136      <para>le nom de la table et de la colonne à mettre à jour&nbsp;;</para>
137     </listitem>
138
139     <listitem>
140      <para>la nouvelle valeur de la colonne&nbsp;;</para>
141     </listitem>
142
143     <listitem>
144      <para>les lignes à mettre à jour.</para>
145     </listitem>
146    </orderedlist>
147   </para>
148
149   <para>
150    Nous avons vu dans le <xref linkend="ddl"> que le SQL ne donne pas
151    par défaut d'identifiant unique pour les lignes. Du coup,
152    il n'est pas nécessairement possible d'indiquer directement quelle
153    ligne il faut mettre à jour. À la place, nous indiquons quelles conditions
154    une ligne doit remplir pour être mise à jour. Si la table a une clé primaire
155    (qu'elle soit déclarée ou non), nous pouvons indiquer une ligne unique en
156    donnant une condition qui porte sur la clé primaire. Les outils graphiques
157    d'accès aux bases de données utilisent ce principe pour vous permettre de
158    modifier les lignes individuellement.
159   </para>
160
161   <para>
162    Par exemple, cette commande modifie tous les produits qui ont un prix de
163    5 et met leur prix à 10.
164 <programlisting>
165 UPDATE produits SET prix = 10 WHERE prix = 5;
166 </programlisting>
167     Ceci peut mettre à jour zéro, une ou plusieurs lignes.
168     Ce n'est pas une erreur d'exécuter une commande
169     <literal>UPDATE</literal> qui ne met à jour aucune ligne.
170   </para>
171
172   <para>
173    Voyons la commande en détail&nbsp;: d'abord, il y a le mot clé
174    <literal>UPDATE</literal> suivi par le nom de la table.
175    Comme d'habitude, le nom de la table peut être précisé par un nom de
176    schéma, sans quoi le schéma est recherché dans le chemin.
177    Ensuite, il y a le mot clé <literal>SET</literal> suivi par
178    le nom de la colonne, un signe égal et la nouvelle valeur de la colonne.
179    La nouvelle valeur de la colonne peut être une constante ou une
180    expression scalaire. Par exemple, pour augmenter de 10% le prix de tous les
181    produits, on peut exécuter&nbsp;:
182 <programlisting>
183 UPDATE produits SET prix = prix * 1.10;
184 </programlisting>
185    Comme vous le voyez, l'expression donnant la nouvelle valeur peut
186    faire référence à l'ancienne valeur.
187    Nous n'avons pas encore parlé de la clause <literal>WHERE</literal>.
188    Si elle est omise, cela veut dire que toutes les lignes de la table sont
189    modifiées. Si elle est présente, seules les lignes qui remplissent la
190    condition après le <literal>WHERE</literal> sont mises à jour.
191    Remarquez que le signe égal dans la clause <literal>SET</literal>
192    est une affectation, alors que celui de la clause
193    <literal>WHERE</literal> est une comparaison, mais cela ne crée pas
194    d'ambiguïté. Bien sûr, les conditions ne sont pas nécessairement des tests
195    d'égalité. De nombreux autres opérateurs existent (voir le <xref
196    linkend="functions">). Mais l'expression doit s'évaluer en une expression
197    booléenne.
198   </para>
199
200   <para>
201    Il est aussi possible de mettre plus d'une colonne à jour dans
202    une commande <literal>UPDATE</literal> en indiquant plusieurs
203    colonnes dans la clause <literal>SET</literal>. Par exemple&nbsp;:
204 <programlisting>
205 UPDATE matable SET a = 5, b = 3, c = 1 WHERE a > 0;
206 </programlisting>
207   </para>
208  </sect1>
209
210  <sect1 id="dml-delete">
211   <title>Supprimer des données</title>
212
213   <indexterm zone="dml-delete">
214    <primary>suppression</primary>
215   </indexterm>
216
217   <indexterm zone="dml-delete">
218    <primary>DELETE</primary>
219   </indexterm>
220
221   <para>
222    Jusqu'ici, nous avons expliqué comment ajouter des données à une table
223    et comment les modifier. Il nous reste à voir comment les enlever quand
224    elles ne sont plus nécessaires. De la même façon que pour l'insertion, la
225    suppression ne peut se faire que par ligne entière. Dans la section
226    précédente, nous avons expliqué que le SQL ne propose pas de moyen
227    d'accéder à une ligne particulière. C'est pourquoi la suppression de
228    lignes se fait en indiquant les conditions à remplir par les lignes à
229    supprimer. S'il y a une clé primaire dans la table, alors il est
230    possible d'indiquer exactement la ligne à supprimer.
231    Mais on peut aussi supprimer un groupe de lignes qui remplissent une
232    condition, ou même toutes les lignes d'une table d'un coup.
233   </para>
234
235   <para>
236    On utilise la commande <literal>DELETE</literal> pour supprimer des
237    lignes&nbsp;; la syntaxe est très similaire à la commande
238    <literal>UPDATE</literal>. Par exemple, pour supprimer toutes les lignes de
239    la table produits qui ont un prix de 10, on exécute&nbsp;:
240 <programlisting>
241 DELETE FROM produits WHERE prix = 10;
242 </programlisting>
243   </para>
244
245   <para>
246    En indiquant simplement
247 <programlisting>
248 DELETE FROM produits;
249 </programlisting>
250    on supprime toutes les lignes de la table. Attention aux mauvaises
251    manipulations&nbsp;!
252   </para>
253  </sect1>
254 </chapter>
255
Note: See TracBrowser for help on using the browser.