Cours intensif de MySQL - Partie 2
Bienvenue une nouvelle fois ! Dans les colonnes de mon précédent article, j’ai introduit quelques uns des concepts fondamentaux permettant l’utilisation du MySQL et de SQL, expliquant comment créer des tables, les remplir avec des données et retrouver ces mêmes données. Dans cet article, nous allons introduire les instructions UPDATE, DELETE, ALTER, et DROP et quelques clauses particulières pour l’instruction SELECT. Même si nous ne traiterons d’aucun code PHP aujourd’hui, ces concepts sont les bases requises avant que nous allions plus loin. Ceci étant dit, allons-y.
Le SQL plus amusant
L’article précédent expliquait comment utiliser l’instruction SELECT pour retrouver des données d’une table par l’intermédiaire d’une base de donnée. Comme vous l’avez peut être supposé, l’instruction SELECT est un peu plus complexe. Il y a beaucoup de conditions différentes qui peuvent contrôler exactement les données que vous souhaitez récupérer d’une table. La première d’entre-elles est la condition WHERE.
La condition WHERE dans SQL concerne les conditions qui doivent être mises en ordre pour une ligne particulière d’une table pour être du résultat de la requête. Pour utiliser cette condition ajouter simplement celle-ci à la fin d’une requête applicable comme ceci :
mysql> SELECT * FROM books WHERE author_id=1;
+---------+-----------+------------------+------------+
| book_id | author_id | title | pub_date |
+---------+-----------+------------------+------------+
| 1 | 1 | PHP Unleashed | 2003-11-01 |
| 2 | 1 | PHP4 Programming | 2002-10-01 |
+---------+-----------+------------------+------------+
2 rows in set (0.00 sec)
Dans ce cas, j’ai simplement sélectionné les lignes de la table books (livres) où la valeur de la colonne author_id (auteurs_id) est 1 de 1. Comme n’importe quelle opération conditionnelle d’un langage de programmation, l’instruction SQL WHERE supporte différentes opérations logiques. Voici les plus communes, représentées en terme de A et B:
| Expression | Evaluation |
|---|---|
| A = B | Vrai si A égal B |
| A != B | Vrai si A n’est pas égal à B |
| A <= B | Vrai si A est plus petit ou égal à B |
| A > B | Vrai si A est plus grand ou égal à B |
| A < B | Vrai si A est plus petit que B |
| A > B | Vrai si A est plus grand que B |
| A <=> B | Vrai si A est égal à B (Valeurs nulles comprises) |
| A IS NULL | Vrai si A est nul |
| A IS NOT NULL | Vrai si A est non nul |
| A BETWEEN M AND N | Vrai si la valeur de A est située entre celles de M et de N |
| A NOT BETWEEN M AND N | Vrai si la valeur de A n’est pas située entre celles de M et de N |
| A IN(value, value2, …) | Vrai si la valeur de A est l’une des valeurs listées |
| A NOT IN (value, value2, …) | Vrai si la valeur de A n’est pas dans les valeurs listées |
Note : la raison d’un opérateur de comparaison NULL spécial pour valeurs nulles, l’opérateur <=>, provient du fait que MYSQL peut gérer NULL les valeurs nulles. Par définition la comparaison de deux valeurs NULL, nulles donne un résultat faux (puisque NULL, nul est une valeur indéfinie). Vous devez utiliser cet opérateur lorsque vous comparez deux valeurs dans SQL qui peuvent être NULL, nulles. Avec ces opérateurs (qui n’intéressent que des comparaisons numériques), l’opérateur LIKE s’occupe de partie de chaînes de caractères. Par exemple, pour donner un résultat de requête contenant tous les livres qui ont PHP dans leur titre:
mysql> SELECT * FROM books WHERE title LIKE "%PHP%";
+---------+-----------+------------------+------------+
| book_id | author_id | title | pub_date |
+---------+-----------+------------------+------------+
| 1 | 1 | PHP Unleashed | 2003-11-01 |
| 2 | 1 | PHP4 Programming | 2002-10-01 |
+---------+-----------+------------------+------------+
2 rows in set (0.04 sec)
La syntaxe pour l’opérateur LIKE est : LIKE <pattern> où le signe pourcent (%) sert de séparateur. Dans l’exemple ci-dessus, le morceau de chaîne de caractère %PHP% permet d’identifier toutes les lignes dont le title, titre de colonne comporte la chaîne PHP. C’est une opération insensible à la casse des caractères. Note : Si vous souhaitez pouvoir repérer le caractère littéral pourcent, vous pouvez le faire en le doublant; i.e.,%%.
Même si je vous ai présenté la condition WHERE comme faisant partie de l’instruction SELECT, cette technique particulière d’identification de lignes dans une table fonctionne aussi lorsque vous supprimez ou mettez à jour des enregistrements. Pour mettre à jour certains enregistrements d’une table, utilisez l’instruction UPDATE au lieu de l’instruction SELECT. Par exemple, pour prendre en compte le fait que je ne réside plus dans le Michigan, étant parti pour des contrées au climat plus chaud. La première étape de modification des enregistrements est celle d’identifier quels sont, ceux de authors, la table des auteurs qui ont besoin d’être modifiés.
mysql> SELECT * FROM authors WHERE name LIKE "%Coggeshall";
+-----------+-----------------+-------+
| author_id | name | state |
+-----------+-----------------+-------+
| 1 | John Coggeshall | MI |
+-----------+-----------------+-------+
1 row in set (0.00 sec)
Comme vous pouvez le voir, mon author_id, id d’auteur est de 1. Comme ce nombre est appelé à être un identifiant unique pour cet enregistrement dans notre table (désigné aussi par clé primaire), nous pouvons l’utiliser en conjonction avec l’instruction UPDATE pour modifier uniquement cet enregistrement dans la table.
mysql> UPDATE authors SET state='FL' WHERE author_id=1;
Query OK, 1 row affected (0.05 sec)
Rows matched: 1 Changed: 1 Warnings: 0
Note : bien qu’il soit possible techniquement d’utiliser la même condition WHERE comme dans l’instruction SELECT pour identifier la valeur d’author_id, l’id d’auteur (identifiant d’auteur), c’est en général considéré comme une mauvaise pratique de se fier à de conditions pour constituer la base d’après laquelle les lignes de la table seront modifiées. Par exemple, que ce serait-il passé si deux personnes possédaient le nom de famille Coggeshall? Vous devez toujours utiliser l’identifiant unique comme la condition à partir de laquelle seront opérées les futures modifications. Comme nous venons de le voir, la précédente requête modifie une simple ligne (parce qu’il n’y a qu’une ligne possédant une valeur d’author_id, d’id d’auteur (identifiant d’auteur) de 1). Elle change la valeur correspondante de la colonne state, état par FL. La syntaxe générale pour l’instruction UPDATE est la suivante:
UPDATE <table> SET <column>=<value>, <column>=<value>, ... WHERE <conditions>
<table> représente la table qui va être concernée par le changement, la paire column/value, colonne/valeur désigne les valeurs individuelles à modifier dans les lignes qui répondent à la condition WHERE. Même si cela est rare, il peut y avoir des fois ou l’on pourrait vouloir changer toutes les valeurs d’une colonne particulière. Dans ce cas, vous devez omettre la condition WHERE entièrement. Soyez alors très prudent. Si il est possible de modifier les enregistrements existants dans une table, de la même façon il devrait être possible de supprimer certains enregistrement des tables. Cette opération est réalisée par l’intervention de l’instruction nommée précisément DELETE. Par exemple, pour supprimer mon propre enregistrement de authors,la table authors (auteurs), utiliser ceci:
mysql> DELETE FROM authors WHERE author_id=1;
Query OK, 1 row affected (0.06 sec)
Note : pour poursuivre avec ces exemples, les lignes supprimées dans ce cas doivent préalablement exister avant de pouvoir être supprimées. L’instruction ci-dessus n’est donnée qu’à titre d’exemple. Comme vous pouvez le constater, supprimer des lignes dans une table est un processus relativement simple. La syntaxe générale pour l’instruction DELETE est indiquée ci-dessous:
DELETE FROM <table> WHERE <conditions>
Comme c’était le cas avec l’instruction UPDATE, vous pouvez omettre la condition WHERE dans l’instruction DELETE, entraînant alors la disparition du contenu entier de la table concernée. Dans SQL, il n’y a pas de moyens raisonables qui donnent la possibilité de pouvoir récupérer des données une fois quelles ont été supprimées d’une table, ayez une grande prudence pour vous assurer que toutes les requêtes DELETE se comportent comme prévu. Il est souvent utile d’effectuer à l’issue de celle(s)-ci une requête SELECT COUNT(*) avec une condition WHERE, pour vérifier que vous n’avez effacé que les lignes que vous souhaitiez éliminer. Notez aussi, que comme le prouve l’exemple, lorsque vous supprimez le contenu entier d’une table, MySQL ne vous indique pas combien de lignes ont été concernées. Cela est du au fait qu’une seule table peut contenir des milliers de lignes et compter chacune d’elles lorsqu’elles viennent d’être effacées est tout simplement inutile. Les deux dernières instructions que nous verrons aujourd’hui servent à modifier les tables elles-mêmes dans une base de donnée. L’instruction ALTER change les propriétés des tables (par exemple, ajouter une toute nouvelle colonne à la définition de la table). Si vous voulez ajouter une colonne qui garde la trace de l’identifiant ISBN de chaque livre dans books, la table books (livres), vous pouvez le faire de la manière suivante:
mysql> ALTER TABLE books ADD isbn VARCHAR(25) AFTER pub_date;
Query OK, 4 rows affected (0.10 sec)
Records: 4 Duplicates: 0 Warnings: 0
Dans ce cas, j’ai ajouté une nouvelle colonne nommée isbn, isbn, de type VARCHAR comme dernier item de la table, en la plaçant après la colonne pub_date, pub_date (date de publication), celle-ci étant précédemment la dernière colonne de books, la table books (livres). Pour visualiser ceci, utilisez l’instruction DESC de cette façon :
mysql> DESC books;
+-----------+--------------+-------------------+------+-----+---------+----------------+
| Field | Type | Collation | Null | Key | Default | Extra |
+-----------+--------------+-------------------+------+-----+---------+----------------+
| book_id | int(11) | binary | YES | PRI | NULL | auto_increment |
| author_id | int(11) | binary | YES | | NULL | |
| title | varchar(255) | latin1_swedish_ci | YES | | NULL | |
| pub_date | date | latin1_swedish_ci | YES | | NULL | |
| isbn | varchar(25) | latin1_swedish_ci | YES | | NULL | |
+-----------+--------------+-------------------+------+-----+---------+----------------+
5 rows in set (0.00 sec)
Pour enlever cette colonne de la table, utilisez encore l’instruction ALTER. Où alors, au lieu d’utiliser ADD, prenez DROP:
mysql> ALTER TABLE books DROP isbn;
Query OK, 4 rows affected (0.00 sec)
Records: 4 Duplicates: 0 Warnings: 0
Pour ajouter une nouvelle colonne à la table, comme première colonne, c’est possible grâce à l’instruction FIRST, au lieu de AFTER:
mysql> ALTER TABLE books ADD isbn VARCHAR(25) FIRST;
Query OK, 4 rows affected (0.00 sec)
Records: 4 Duplicates: 0 Warnings: 0
Voici la syntaxe générale d’une instruction ALTER :
ALTER TABLE <table> [ADD | DROP] <column definition> [FIRST | AFTER <column>]
Note : Lorsque l’on modifie une table qui contient déja des données, des valeurs par défaut sont utilisées pour remplir les enregistrements qui existaient avant.
La dernière instruction que je vais présenter est DROP.Cette instruction peut supprimer le contenu entier d’une base de données ou simplement le contenu de certaines données dans la table d’une base.
La syntaxe de l’instruction DROP est très simple, je ne vous donnerai ici que sa forme générale :
DROP [TABLE | DATABASE] <table or database name>
Comme cela était le cas avec l’instruction DELETE, il est très important de faire attention lorsque l’on supprime des contenus d’une table d’une base de données car bien que cette opération soit très facilement réalisable, les procédés permettant la récupération de données éliminées d’une base sont très longs et peuvent être également très couteux.
A suivre…
Terminé pour aujourd’hui. Nous n’avons vu qu’une toute petite partie de ce qu’il est possible de faire avec un RDBMS (Relation DataBase Management System) comme MySQL. Maintenant, je vous ai présenté toutes les instructions dont vous pouvez avoir besoin rapidement. Bien sûr, pour ceux d’entre vous qui souhaitent une information plus importante, le site web MySQL, sera un excellent complément de ressource. Dans un prochain article, je terminerai ma présentation de MySQL, avec l’instruction complexe SELECT et d’autres fonctions internes très utiles. De sorte qu’à l’issue de ces trois articles, vous serez prêts pour utiliser MySQL dans vos scripts PHP. A bientôt.

Textes originaux en anglais sur O’Reilly : MySQL Crash Course par John Coggeshall
Chargement
Commentaires récents