insert
est la suivante.
Exemple 53. Forme générale de l'
insert
INSERT INTO nom_de_table [(liste_de_colonnes)] VALUES (liste_de_valeurs) [,(liste_de_valeurs)]
Exemple 54. Insertion directe d'une sous-requête
INSERT INTO nom_de_table [(liste_de_colonnes)] clause_select
Marins
dans une table
Noms_marins
. Commençons par créer cette table.
Écrivons à présent la copie proprement dite.
Exemple 55. Copie partielle d'une table dans une autre
create table Noms_marins ( nom varchar(32), prenom varchar(32) ) ; insert into Noms_marins select (nom, prenom) from Marins where ddmort is null ;
nom
et
prenom
dans la table d'arrivée, et seulement les marins qui sont encore en vie. Bien sûr cette copie est réalisée au moment où la requête est lancée. Le fait d'ajouter des éléments à la table
Marins
ne met pas à jour la table
Noms_marins
.
Remarquons tout d'abord que, techniquement, la liste des colonnes en paramètre de l'
insert
est optionnelle. Bien qu'elle le soit effectivement, il est très dangereux de ne pas la mettre, surtout dans le cas où toutes les données insérées ont même type, par exemple
varchar
.
Effectivement, si la liste des colonnes n'est pas précisée, le serveur va en construire une, dans un ordre qu'il est parfois impossible de connaître à l'avance. Les valeurs qui suivent vont donc venir se ranger dans la table, dans des colonnes choisies au petit bonheur la chance. Comportement fortement déconseillé...
Préciser systématiquement cette liste est une précaution élémentaire, qui de plus, permet de réaliser des insertions en ne précisant qu'une partie des colonnes d'une table, et en laissant le serveur insérer les valeurs par défaut, ou
null
sur les autres colonnes.
Lors d'une insertion, les contraintes d'intégrité s'appliquent. Il est donc possible qu'une insertion soit refusée par le serveur.