root/traduc/trunk/postgresql/dml.xml

Revision 1089, 9.9 kB (checked in by sas, 5 months ago)

OK pour moi

  • Property svn:keywords set to Date Author Revision
Line 
1 <?xml version="1.0" encoding="ISO-8859-15"?>
2 <!-- Dernière modification
3      le       $Date$
4      par      $Author$
5      révision $Revision$ -->
6 <!-- SAS : 20070511, PG824 -->
7
8 <chapter id="dml">
9  <title>Manipulation de données</title>
10
11  <remark>
12   Ce chapitre est toujours assez incomplet.
13  </remark>
14
15  <para>
16   Le chapitre précédent présente la création des tables et
17   des autres structures de stockage des données. Il est temps de remplir ces
18   tables avec des données. Le présent chapitre couvre l'insertion, la mise à jour et
19   la suppression des données des tables.
20   Il introduit également les outils de modifications automatiques des
21   données en fonction d'évènements précis&nbsp;:
22   les déclencheurs et les règles de réécriture. Après cela, le chapitre présente
23   l'élimination des données perdues.
24  </para>
25
26  <sect1 id="dml-insert">
27   <title>Insérer des données</title>
28
29   <indexterm zone="dml-insert">
30    <primary>insertion</primary>
31   </indexterm>
32
33   <indexterm zone="dml-insert">
34    <primary>INSERT</primary>
35   </indexterm>
36
37   <para>
38    Quand une table est créée, elle ne contient aucune donnée.
39    La première chose à faire, c'est d'y insérer des données. Sans quoi
40    la base de données n'est pas d'une grande utilité.
41    Les données sont conceptuellement insérées ligne par ligne. Il est évidemment possible
42    d'insérer plus d'une ligne, mais il n'est pas possible d'entrer moins
43    d'une ligne à la fois. Même lorsque seules les valeurs d'une
44    partie des colonnes sont connues, une ligne complète doit être créée.
45   </para>
46
47   <para>
48    Pour créer une nouvelle ligne, la commande <xref
49    linkend="sql-insert" endterm="sql-insert-title"/> est utilisée.
50    La commande a besoin du nom de la table et d'une valeur pour
51    chaque colonne de cette table.
52   </para>
53   <para>
54    Soit la table des produits du <xref linkend="ddl"/>&nbsp;:
55 <programlisting>CREATE TABLE produits (
56     no_produit integer,
57     nom text,
58     prix numeric
59 );</programlisting>
60   </para>
61   <para>
62    Une commande d'insertion d'une ligne peut être&nbsp;:
63 <programlisting>INSERT INTO produits VALUES (1, 'Fromage', 9.99);</programlisting>
64   </para>
65   <para>
66    Les données sont listées dans l'ordre des colonnes
67    de la table, séparées par des virgules. Souvent, les
68    données sont des libellés (constantes) mais les expressions
69    scalaires sont aussi acceptées.
70   </para>
71
72   <para>
73    La syntaxe précédente oblige à connaître l'ordre des colonnes.
74    Pour éviter cela, les colonnes peuvent être explicitement listées.
75    Les deux commandes suivantes ont, ainsi, le même effet que la
76    précédente&nbsp;:
77 <programlisting>INSERT INTO produits (no_produit, nom, prix) VALUES (1, 'Fromage', 9.99);
78 INSERT INTO produits (nom, prix, no_produit) VALUES ('Fromage', 9.99, 1);</programlisting>
79    Beaucoup d'utilisateurs recommandent de toujours lister les noms de colonnes.
80   </para>
81
82   <para>
83    Si les valeurs de certaines colonnes ne sont pas connues,
84    elles peuvent être omises. Dans ce cas, elles sont remplies avec leur
85    valeur par défaut. Par exemple&nbsp;:
86 <programlisting>INSERT INTO produits (no_produit, nom) VALUES (1, 'Fromage');
87 INSERT INTO produits VALUES (1, 'Fromage');</programlisting>
88    La seconde instruction est une extension
89    <productname>PostgreSQL</productname>. Elle remplit les colonnes de
90    gauche à droite avec toutes les valeurs données, et les autres prennent
91    leur valeur par défaut.
92   </para>
93
94   <para>
95    Il est possible, pour plus de clarté, d'appeler explicitement les valeurs
96    par défaut pour des colonnes particulières ou pour la ligne complète.
97 <programlisting>INSERT INTO produits (no_produit, nom, prix) VALUES (1, 'Fromage', DEFAULT);
98 INSERT INTO produits DEFAULT VALUES;</programlisting>
99   </para>
100
101   <para>
102    Plusieurs lignes peuvent être insérées en une seule commande&nbsp;:
103 <programlisting>
104 INSERT INTO produits (no_produit, nom, prix) VALUES
105     (1, 'Fromage', 9.99),
106     (2, 'Pain', 1.99),
107     (3, 'Lait', 2.99);
108 </programlisting>
109   </para>
110
111   <tip>
112    <para>
113     Lors de l'insertion d'une grande quantité de données en même temps,
114     il est préférable d'utiliser la commande <xref linkend="sql-copy"
115     endterm="sql-copy-title"/>. Elle n'est pas aussi flexible que la commande
116     <xref linkend="sql-insert" endterm="sql-insert-title"/> mais elle est plus
117     efficace. Se référer à <xref linkend="populate"/> pour plus d'informations
118     sur l'amélioration des performances lors de gros chargements de données.
119    </para>
120   </tip>
121  </sect1>
122
123  <sect1 id="dml-update">
124   <title>Actualiser les données</title>
125
126   <indexterm zone="dml-update">
127    <primary>actualisation</primary>
128   </indexterm>
129
130   <indexterm zone="dml-update">
131    <primary>modification</primary>
132   </indexterm>
133
134   <indexterm zone="dml-update">
135    <primary>mise à jour</primary>
136   </indexterm>
137
138   <indexterm zone="dml-update">
139    <primary>UPDATE</primary>
140   </indexterm>
141
142   <para>
143    La modification de données présentes en base est
144    appelée mise à jour ou actualisation
145    (<foreignphrase>update</foreignphrase> en anglais).
146    Il est possible de mettre à jour une ligne spécifique, toutes
147    les lignes ou un sous-ensemble de lignes de la table. Chaque colonne peut
148    être actualisée séparément&nbsp;;
149    les autres colonnes ne sont alors pas modifiées.
150   </para>
151
152   <para>
153    Pour réaliser une mise à jour, trois informations sont nécessaires&nbsp;:
154    <orderedlist spacing="compact">
155     <listitem>
156      <para>le nom de la table et de la colonne à mettre à jour&nbsp;;</para>
157     </listitem>
158
159     <listitem>
160      <para>la nouvelle valeur de la colonne&nbsp;;</para>
161     </listitem>
162
163     <listitem>
164      <para>les lignes à mettre à jour.</para>
165     </listitem>
166    </orderedlist>
167   </para>
168
169   <para>
170    Comme cela a été vu dans le <xref linkend="ddl"/>, le SQL ne donne pas,
171    par défaut, d'identifiant unique pour les lignes. Il n'est, de ce fait,
172    pas toujours possible d'indiquer directement la ligne à mettre à jour.
173    On précise plutôt les conditions qu'une ligne doit remplir pour
174    être mise à jour. Si la table possède une clé primaire
175    (qu'elle soit déclarée ou non), une ligne unique peut être choisie en
176    précisant une condition sur la clé primaire. Les outils graphiques
177    d'accès aux bases de données utilisent ce principe pour permettre
178    les modifications de lignes individuelles.
179   </para>
180
181   <para>
182    La commande suivante, par exemple, modifie tous les produits dont le prix
183    est 5 en le passant à 10.
184 <programlisting>UPDATE produits SET prix = 10 WHERE prix = 5;</programlisting>
185     Cela peut mettre à jour zéro, une, ou plusieurs lignes.
186     L'exécution d'une commande <literal>UPDATE</literal> qui ne met à jour
187     aucune ligne ne représente pas une erreur.
188   </para>
189
190   <para>
191    Dans le détail de la commande, on trouve tout d'abord, le mot clé
192    <literal>UPDATE</literal> suivi du nom de la table.
193    Le nom de la table peut toujours être préfixé par un nom de
194    schéma&nbsp; dans le cas contraire elle est recherchée dans le chemin.
195    On trouve ensuite le mot clé <literal>SET</literal> suivi du nom de la
196    colonne, un signe égal et la nouvelle valeur de la colonne, qui peut être
197    une constante ou une expression scalaire.
198   </para>
199    
200   <para>
201    Par exemple, pour augmenter de 10% le prix de tous les
202    produits, on peut exécuter&nbsp;:
203 <programlisting>UPDATE produits SET prix = prix * 1.10;</programlisting>
204   </para>
205  
206   <para>
207    L'expression donnant la nouvelle valeur peut
208    faire référence aux valeurs courantes de la ligne.
209   </para>
210  
211   <para>
212    Il n'a pas été indiqué ici de clause <literal>WHERE</literal>.
213    Si elle est omise, toutes les lignes de la table sont
214    modifiées. Si elle est présente, seules les lignes qui remplissent la
215    condition <literal>WHERE</literal> sont mises à jour.
216    Le signe égal dans la clause <literal>SET</literal>
217    réalise une affectation, alors que celui de la clause
218    <literal>WHERE</literal> permet une comparaison. Pour autant, cela ne crée pas
219    d'ambiguïté. La condition <literal>WHERE</literal> n'est pas
220    nécessairement un test d'égalité&nbsp; de nombreux autres opérateurs existent
221    (voir le <xref linkend="functions"/>). Mais le résultat de l'expression est
222    booléen.
223   </para>
224
225   <para>
226    Il est possible d'actualiser plusieurs colonnes en
227    une seule commande <command>UPDATE</command> par l'indication de plusieurs
228    colonnes dans la clause <literal>SET</literal>.
229   </para>
230  
231   <para>
232    Par exemple&nbsp;:
233 <programlisting>UPDATE ma_table SET a = 5, b = 3, c = 1 WHERE a &gt; 0;</programlisting>
234   </para>
235  </sect1>
236
237  <sect1 id="dml-delete">
238   <title>Supprimer des données</title>
239
240   <indexterm zone="dml-delete">
241    <primary>suppression</primary>
242   </indexterm>
243
244   <indexterm zone="dml-delete">
245    <primary>DELETE</primary>
246   </indexterm>
247
248   <para>
249    Les parties précédentes présentent l'ajout et la modification de données.
250    Il reste à voir leur suppression quand elles ne sont plus nécessaires.
251    Comme pour l'insertion, la suppression ne peut se faire que par ligne
252    entière. Le SQL ne propose pas de moyen
253    d'accéder à une ligne particulière. C'est pourquoi la suppression de
254    lignes se fait en indiquant les conditions à remplir par les lignes à
255    supprimer. S'il y a une clé primaire dans la table, alors il est
256    possible d'indiquer précisément la ligne à supprimer.
257    Mais on peut aussi supprimer un groupe de lignes qui remplissent une
258    condition, ou même toutes les lignes d'une table en une fois.
259   </para>
260
261   <para>
262    Pour supprimer des lignes, on utilise la commande <xref linkend="sql-delete"
263    endterm="sql-delete-title"/>&nbsp;; la syntaxe est très similaire à la
264    commande <command>UPDATE</command>.
265   </para>
266  
267   <para>
268    Par exemple, pour supprimer toutes les lignes de
269    la table produits qui ont un prix de 10, on exécute&nbsp;:
270 <programlisting>DELETE FROM produits WHERE prix = 10;</programlisting>
271   </para>
272
273   <para>
274    En indiquant simplement&nbsp;:
275 <programlisting>DELETE FROM produits;</programlisting>
276    on supprime toutes les lignes de la table. Attention aux mauvaises
277    manipulations&nbsp;!
278   </para>
279  </sect1>
280 </chapter>
281
Note: See TracBrowser for help on using the browser.