SQL - créationGestion des données

Une fois que nos tables sont créées, et que les contraintes sont mises, on peut considérer que la partie la plus compliquée de la création de notre base de données est terminée.
Et ce pour une très simple et bonne raison! Vu qu'on a restreint les possibilités au maximum, on est sûr que dorénavant on ne pourra pas rentrer n'importe quoi dans les tables, et ça c'est cool (j'ai connu des applis à reprendre avec des redondances de partout, voire même des valeurs différentes dans deux tables pour la même info).

Ainsi, vous n'aurez plus droits aux applications où un animal par exemple peut peser 35g, où le poids d'un squelette est plus lourd que le poids total de l'animal, où un gène est sur un chromosome farfelu...

Maintenant, il ne nous reste plus qu'à implémenter la base de données, c'est-à-dire remplir la base avec les informations.

Il existe trois ordres de base pour la gestion des données dans une base:
insert: création de contenu
update: modification de contenu
delete: suppression de contenu

Il existe également un ordre secondaire, truncate mais avec ces trois là, on peut déjà tout faire!

Ajout d'un enregistrement

Un enregistrement s'ajoute en utilisant la commande insert.
La syntaxe d'un ajout est la suivante: insert into ma_table (attr1, attr2, ...) values ('val1','val2',...);

  1. mysql> insert into personne(id, nom, adresse) values(124,'Jean','Paris');
  2. mysql> insert into personne(id, adresse, nom) values(456,'Matt','Lyon');
  3. mysql> insert into personne values(789,'Ana','Clermont');
Vous voyez qu'il y a ici plusieurs possibilités pour rentrer une information: Vous remarquez que pour les chaînes de caractères il faut mettre des quotes ('') afin de bien délimiter la valeur du champ. C'est le cas pour tous les types de caractères sauf les numériques et les booléens.

Dans le cas d'une table avec une clé auto-incrémentée, on ne va pas spécifier l'attribut auto_increment. Par contre il faudra spécifier tous les attributs.

  1. mysql> create table gene(id int primary key auto_increment, num_acc varchar(20), localisation varchar(20));
  2. mysql> insert into gene(num_acc, localisation) values('chs1','...');

Dans le cas d'une table avec des attributs nullable, on peut soit ne pas le mettre dans la liste des attributs à renseigner soit utiliser le mot-clé null.

  1. mysql> insert into gene(num_acc) values('chs1');
  2. mysql> insert into gene(num_acc, localisation) values('chs1',null);

On peut également insérer plusieurs lignes en une seule fois. Il faut alors bien prendre en compte que toutes nos insertions devront contenir le même nombre d'attributs, et chaque ligne sera entourée de parenthèses.

  1. mysql> insert into cours(cnum, desc) values('F234','Info1'),('M321','Analyse 1'),('CS24','BD 1');

Enfin on peut utiliser le résultat d'une requête de sélection (que l'on verra plus tard) afin de remplir une table, voire même créer une table directement depuis une requête (la table créée aura automatiquement les attributs issus de la requête. Cela s'appelle l'insertion en masse.

  1. mysql> insert into ma_table select att1,att2 from ma_table2;
  2. mysql> create table ma_table as select att1,att2 from ma_table2;

Modification d'un enregistrement

Quand on fait une erreur lors d'un enregistrement, comme pour la structure des tables, il y a deux solutions: Pour modifier un enregistrement, nous utiliserons l'ordre update.
Voici la sytaxe: update ma_table set att1='val1' where ....
Si on ne spécifie pas le where alors toutes les lignes seront impactées. Ce mot-clé correspond à une sélection de lignes. Tiens tiens ça ne vous rappelle rien la sélection???

  1. mysql> update personne set age=40 where nom='Claude';
  2. mysql> update affectation set note=20;

Suppression d'un enregistrement

Quand on veut supprimer un enregistrement de l'une de nos tables, on utilise l'ordre .
Voici la sytaxe: delete from ma_table where ....
Si on ne spécifie pas le where, tout comme pour la modification, alors toutes les lignes seront effacées. Cela correspond à vider la table.

  1. mysql> delete from affectation where note < 12;
  2. mysql> delete from affectation;

L'ordre truncate
Il existe une seconde méthode pour vider la table plus propre que delete, l'ordre truncate. Non seulement il enlève toutes les lignes mais il "nettoie" également la table.
Par exemple prenons une table ma_table avec une clé primaire id auto-incrémentée. On rajoute 10 enregistrements. On vide la table:
Voici la syntaxe de truncate:truncate ma_table;.

Et voilà, on sait rentrer des informations dans nos tables maintenant, vous voyez, rien de bien méchant encore une fois! Il ne nous reste plus qu'à exploiter nos bases de données et à les faire parler. Pour cela on va faire des requêtes au prochain chapitre.