Aller plus loin avec MySQL

astuces mysql


MySQL
est ce qu’on appelle un SGBD (système de gestion de base de données) qui utilise le langage SQL pour effectuer des opérations sur les bases de données.

Les requêtes SQL les plus souvent effectuées sont les requêtes d’insertion, modification et de suppression de données, mais il en existe des centaines d’astuces toutes aussi pratiques les unes que les autres qui nous permettent d’enrichir ces requêtes!

Bien entendu je suis très loin de toutes les connaitre mais il faut avouer que cela est un réel plus en terme d’optimisation du code (tant en quantité qu’en performance).

Pour vous parler des quelques astuces que j’utilise désormais fréquemment, j’ai pris l’exemple d’un geek qui tomberait amoureux d’une belle et jeune femme que je nommerait ici “DSC003.JPG”.

Tout d’abord voyons les requêtes que je considère comme “classiques”.

Le coup de foudre, le geek tombe amoureux de la sublime créature. L’amour est naissant…

INSERT INTO `coeurdegeek` (`personne`, `pourcentage_amour`) VALUES(`DSC003.JPG`, 10);

Petit à petit l’amour que ce petit geek porte à cette photo femme grandit

UPDATE `coeurdegeek` SET `pourcentage_amour` = `pourcentage_amour` + 10 WHERE `personne`  = “DSC003.JPG”;

Mais un jour malheureusement tout s’arrête, le geek n’a d’yeux que pour une autre fille “LaBombeDu69.jpg”, l’amour pour “DSC003.JPG” n’est plus…

DELETE FROM `coeurdegeek` WHERE `personne` = “DSC003.JPG”;
INSERT INTO `coeurdegeek` (`personne`, `pourcentage_amour`) VALUES(`LaBombeDu69.jpg`, 10);

Vous l’aurez compris, ces trois requetes sont sans doute les plus utilisées, mais il existe des petites astuces MySQL que j’ai découvertes il y a peu pour éviter d’avoir à executer des requetes “en trop”.

En voici une petite liste (si vous en avez d’autres n’hésitez pas à contribuer!).

  • Le “INSERT … ON DUPLICATE KEY” : Cette clause va vous permettre de spécifier une action à faire lorsque l’erreur “duplicate key” sera renvoyée par la requête d’insertion. Pour utiliser cela il vous faut au moins une clé primaire ou une clé unique sur votre table.

Dans notre exemple, nous considèrerons le champ `personne` comme clé unique. Notre geek donc aime désormais une nouvelle fille nommée “LaBombeDu69.jpg”

INSERT INTO `coeurdegeek` (`personne`, `pourcentage_amour`) VALUES(`LaBombeDu69.jpg`, 10);

Il est impossible d’aimer deux fois la même personne, donc nous obtiendrons une erreur si on execute la requete suivante:

INSERT INTO `coeurdegeek` (`personne`, `pourcentage_amour`) VALUES(`LaBombeDu69.jpg`, 20);

Ce que beaucoup utiliseraient alors pour vérifier si on aime déjà cette personne serait de faire:

resultat = SELECT COUNT(`personne`) FROM `coeurdegeek` WHERE `personne` = “LaBombeDu69.jpg”

Si (resultat = 0) alors
INSERT INTO `coeurdegeek` (`personne`, `pourcentage_amour`) VALUES(`LaBombeDu69.jpg`, 20);

Sinon
UPDATE `coeurdegeek` SET `pourcentage_amour` = `pourcentage_amour` + 10 WHERE `personne`  = “LaBombeDu69.jpg”

Voilà, il nous aura fallu écrire ici 3 requêtes pour vérifier si la personne existe dans le `coeurdugeek` et ensuite insérer l’enregistrement si il n’existait pas ou le modifier si il existait.

Un peu long et rébarbatif vous ne trouvez pas?

Avec la clause “ON DUPLICATE KEY“, il vous faudra seulement une ligne de code pour faire la même chose:

INSERT INTO `coeurdegeek` (`personne`, `pourcentage_amour`) VALUES(`LaBombeDu69.jpg`, 20) ON DUPLICATE KEY UPDATE `pourcentage_amour` = `pourcentage_amour` + 20;

  • Le “INSERT IGNORE” : Cette clause permettra à votre script de ne pas s’arrêter lorsque l’erreur “Duplicate key” sera levée.

Si on aime deux fois la même personne, une erreur sera levée car le champ “personne” est unique (ce qui signifie donc que chaque enregistrement `personne` ne sera présent qu’une seule fois dans la table)

La clause IGNORE permettra donc à votre script de ne pas s’arrêter si il rencontre deux fois la même clé unique.

Si notre geek essaye d’aimer deux fois la même personne, il ne se passera rien de spécial et il continuera à n’en aimer qu’une seule!

INSERT IGNORE INTO `coeurdegeek` (`personne`, `pourcentage_amour`) VALUES(‘LaBombeDu69.jpg’, 20);

N’hésitez pas à partager vos astuces qui peuvent parfois être méconnues du grand public (développeur) mais qui changent la vie lorsque nous les connaissons!

Un merci à Nico qui m’a fait découvrir ces quelques astuces!

One thought to “Aller plus loin avec MySQL”

Leave a Reply

Your email address will not be published. Required fields are marked *