| 
			 
  | 
		
			 Recette
			#7:  | 
	
| 
			 Février 2011  | 
		
| 
			 Jusqu'à maintenant nous avons vu uniquement comment interroger
			une table.  | 
	
| 
			 CREATE
			TABLE test_geom ( SELECT
			AddGeometryColumn('test_geom', 'the_geom',  | 
	
Rien de bien nouveau: il s'agit de la même table traitée dans l'exemple précédent.
| 
			 INSERT
			INTO test_geom INSERT
			INTO test_geom INSERT
			INTO test_geom INSERT
			INTO test_geom INSERT INTO
			test_geom  | 
	
La syntaxe INSERT INTO (...) VALUES (...) permet d'insérer des valeurs dans une table:
la première liste contient les noms des colonnes
et la seconde liste contient les valeurs à insérer: les correspondances entre colonnes et valeurs à insérer sont établies par leur position.
vous pouvez aussi simplement
	omettre la liste des colonnes (regardez le deuxième
	exemple):
mais ce n'est pas recommandé, car cette syntaxe
	s'appuie implicitement sur l'ordre par défaut des colonnes et est
	susceptible d'être une source d'erreur. 
	
un autre point important; cette table possède une PRIMARY KEY AUTOINCREMENT:
en règle générale, on propose la valeur NULL , afin de spécifier à SQLite d'attribuer automatiquement une valeur unique.
mais dans le troisième exemple avec INSERT , on a mis une valeur explicite.
| 
			 SELECT *  | 
	
| 
			 id  | 
		
			 name  | 
		
			 measured_value  | 
		
			 the_geom  | 
	
| 
			 1  | 
		
			 first point  | 
		
			 1.234560  | 
		
			 BLOB sz=60 GEOMETRY  | 
	
| 
			 2  | 
		
			 second point  | 
		
			 2.345670  | 
		
			 BLOB sz=60 GEOMETRY  | 
	
| 
			 10  | 
		
			 tenth point  | 
		
			 10.123457  | 
		
			 BLOB sz=60 GEOMETRY  | 
	
| 
			 11  | 
		
			 eleventh point  | 
		
			 11.123457  | 
		
			 BLOB sz=60 GEOMETRY  | 
	
| 
			 12  | 
		
			 twelfth point  | 
		
			 12.123457  | 
		
			 NULL  | 
	
Juste un petit coup d'oeil avant d'aller plus loin ...
| 
			 INSERT INTO
			test_geom  | 
	
cette requête INSERT
va échouer, aboutissant à une erreur: constraint failed.
Pourquoi? une PRIMARY KEY
(clé primaire) est obligatoirement unique.
or id = 2
existe déjà dans cette table. 
| 
			 INSERT OR IGNORE INTO
			test_geom  | 
	
En spécifiant la clause OR IGNORE la requête va maintenant échouer en silence (pour les mêmes raisons).
| 
			 INSERT OR REPLACE INTO
			test_geom  | 
	
Il existe une variante i.e. spécifier la clause OR REPLACE va permettre de mettre à jour la colonne (un peu comme UPDATE).
| 
			 REPLACE
			INTO test_geom REPLACE INTO
			test_geom  | 
	
Une autre alternative est possible, i.e. en utilisant REPLACE
INTO:
mais il s'agit simplement d'un alias pour
INSERT OR REPLACE. 
| 
			 SELECT *  | 
	
| 
			 id  | 
		
			 name  | 
		
			 measured_value  | 
		
			 the_geom  | 
	
| 
			 1  | 
		
			 first point  | 
		
			 1.234560  | 
		
			 BLOB sz=60 GEOMETRY  | 
	
| 
			 2  | 
		
			 POINT #2  | 
		
			 2.200000  | 
		
			 BLOB sz=60 GEOMETRY  | 
	
| 
			 3  | 
		
			 POINT #3  | 
		
			 3.300000  | 
		
			 BLOB sz=60 GEOMETRY  | 
	
| 
			 10  | 
		
			 tenth point  | 
		
			 10.123457  | 
		
			 BLOB sz=60 GEOMETRY  | 
	
| 
			 11  | 
		
			 POINT #11  | 
		
			 11.110000  | 
		
			 BLOB sz=60 GEOMETRY  | 
	
| 
			 12  | 
		
			 twelfth point  | 
		
			 12.123457  | 
		
			 NULL  | 
	
Un autre petit coup d'oeil ...
| 
			 UPDATE
			test_geom SET UPDATE test_geom
			SET  | 
	
Mettre à jour des valeurs n'est pas plus complexe ...
| 
			 DELETE FROM
			test_geom  | 
	
Il en va de même pour la suppression de lignes.
i.e. la clause
DELETE va affecter
toutes les lignes ayant un id pair.
| 
			 SELECT *  | 
	
| 
			 id  | 
		
			 name  | 
		
			 measured_value  | 
		
			 the_geom  | 
	
| 
			 1  | 
		
			 first point  | 
		
			 1.234560  | 
		
			 BLOB sz=60 GEOMETRY  | 
	
| 
			 3  | 
		
			 point-3  | 
		
			 0.003000  | 
		
			 BLOB sz=60 GEOMETRY  | 
	
| 
			 11  | 
		
			 POINT #11  | 
		
			 1000011.110000  | 
		
			 BLOB sz=60 GEOMETRY  | 
	
Un dernier coup d'oeil ...
| 
			 important Attention: appeler les clauses UPDATE
			or DELETE sans
			spécifier de condition après WHERE
			est tout à fait autorisé en SQL.  | 
	
| 
			 
  | 
		
			 Author: Alessandro Furieri a.furieri@lqt.it  | 
	
| 
			 This work is licensed under the Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) license.  | 
	|
| 
			 | 
	|
| 
			 
  | 
		
			 Permission is granted to copy, distribute and/or modify this
			document under the terms of the  |