Planificateur d'événements ou définir une minuterie dans MySQL

Mehvish Ashiq 15 février 2024
  1. MySQL Event et son importance
  2. Planificateur d’événement ou définir une minuterie dans MySQL
  3. Conclusion
Planificateur d'événements ou définir une minuterie dans MySQL

Ce tutoriel vous guide dans la création d’un EVENT, également connu sous le nom de MySQL timer.

Nous verrons comment paramétrer un timer dans MySQL pour laisser MySQL manipuler les données (par exemple, les données UPDATE/INSERT/DELETE). Il effectuera également une sauvegarde à la date et à l’heure mentionnées (si nécessaire).

Nous examinerons MySQL EVENT en considérant différents scénarios. Discutez également de son importance et de ses avantages. Pour cet article, nous utilisons la version 8.0.27 de MySQL, mais vous pouvez obtenir la version la plus récente (si disponible) sur leur site officiel.

MySQL Event et son importance

MySQL EVENT est une tâche utilisée pour planifier certaines opérations, par exemple, la mise à jour des colonnes, la prise des tables ou la sauvegarde de la base de données.

Vous pouvez CRÉER un EVENT qui ne sera exécuté qu’une seule fois ou répété selon les intervalles donnés, par exemple, toutes les minutes, toutes les heures, tous les mois ou tous les ans.

Il n’y a pas de nombre fixe d’instructions pour CRÉER un EVENT. Il peut avoir plusieurs lignes dans le corps EVENT.

Si EVENT a plus d’une ligne, le corps doit être inclus dans les blocs BEGIN et END. Il est également important de savoir que les commandes EVENT programmées sont stockées dans la database et exécutées aux DATE et TIME programmées.

La création d’un événement est importante pour les avantages suivants :

  • Maintient tout le monde sur la même page
  • Fixez vos objectifs
  • Gérer le planning et exécuter les événements
  • Utile pour optimiser les tableaux, mettre à jour les données
  • Générer des rapports utiles pour les heures creuses
  • Vous permet de prioriser vos tâches
  • Économise votre argent et votre temps

Planificateur d’événement ou définir une minuterie dans MySQL

Les retards coûtent très cher à l’équipe de production comme aux marques.

Planifier EVENT ou définir une minuterie pour des champs spécifiques (colonnes), puis les déposer dans un fichier séparé pour le rapport de projet leur fera gagner du temps. De cette façon, cela leur permettra de se concentrer sur d’autres tâches productives.

MySQL utilise un thread appelé event_scheduler pour exécuter tous les événements. Si la valeur de event_scheduler est ON, alors seulement EVENT sera exécuté ; sinon, ce ne sera pas le cas.

Vous devez utiliser la commande suivante pour définir la valeur de event_scheduler égale à ON.

SQL
 sqlCopySET GLOBAL event_scheduler = ON;

Maintenant, si vous CREATE un EVENT, comment savez-vous qu’il sera exécuté ? Utilisez la commande suivante pour le savoir.

SQL
 sqlCopySHOW PROCESSLIST;

Voyons la sortie avant et après avoir défini la valeur de event_scheduler sur ON.

Dans la première sortie, vous ne pouvez pas exécuter EVENT, mais dans la seconde sortie, vous le pouvez. C’est parce que le event_scheduler est ON pour la deuxième capture d’écran.

Production :

event scheduler or set a timer in mysql - show process list part a

event scheduler or set a timer in mysql - show process list part b

Vous pouvez CREER le EVENT pour différentes raisons - par exemple, le EVENT ne sera exécuté qu’une fois ou tous les ans, ou une fois mais dans les intervalles donnés. Commençons à comprendre à l’aide d’un exemple de code.

Nous avons une table student dans la base de données person, qui contient les enregistrements suivants à l’heure actuelle.

event scheduler or set a timer in mysql - current data in student table

Créons le EVENT suivant pour comprendre Événement ponctuel. L’exemple de code est donné ci-dessous.

SQL
 sqlCopySET GLOBAL event_scheduler = ON;

CREATE EVENT IF NOT EXISTS ONE_TIME_EVENT
ON SCHEDULE AT CURRENT_TIMESTAMP
DO
INSERT INTO person.student (id, FIRST_NAME, LAST_NAME, GENDER, EMAIL)
VALUES 
(7, 'Thomas', 'Christoper', 'Male', 'tchristopher@gmail.com');

Dans le code donné ci-dessus, nous définissons la valeur de event_scheduler sur ON pour exécuter EVENT.

Puis nous avons créé un EVENT, nous l’avons nommé ONE_TIME_EVENT, et nous l’avons planifié sur CURRENT_TIMESTAMP. Ce EVENT signifie qu’il sera exécuté une fois le CURRENT_TIMESTAMP et qu’il expirera ensuite.

Cet EVENT ne sera créé que s’il n’existe pas. Le rôle de ce EVENT est d’ INSÉRER une ligne dans la table student.

Après avoir créé et exécuté ce EVENT, vérifiez la table student pour voir le nouvel enregistrement (voir la capture d’écran suivante).

Remarque : Il est possible de donner n’importe quel nom à l’événement, mais de donner un nom unique. Les noms uniques des événements faciliteront votre travail si vous avez de nombreux événements.

Production :

planificateur d’événements ou définir une minuterie dans mysql - données mises à jour dans la table des étudiants

Supposons que vous deviez CREER un EVENT qui s’exécutera après 20 secondes du CURRENT_TIMESTAMP. Cet événement ne sera également exécuté qu’une seule fois. Écrivez le code suivant et comprenez.

SQL
 sqlCopyCREATE EVENT IF NOT EXISTS ONE_TIME_EVENT_WITH_INTERVAL
ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 20 SECOND
DO
INSERT INTO person.student 
VALUES 
(8, 'Suzu', 'Aly', 'Fmale', 'aly.suzu@yahoo.com');

Production :

Vous pouvez voir le nouvel enregistrement dans le table student après 20 secondes.

Gardez à l’esprit que vous ne verrez pas cette nouvelle ligne dans la table student si vous la cochez avant 20 secondes. Laissez passer les vingt secondes, puis vérifiez.

planificateur d’événements ou définir une minuterie dans mysql - données mises à jour après vingt secondes dans la table des étudiants

Utilisez le code suivant pour voir combien d’événements sont créés et programmés.

SQL
 sqlCopySHOW EVENTS FROM classicmodels;

Production :

event scheduler or set a timer in mysql - events list

Pourquoi aucun des EVENT n’est listé dans la capture d’écran ci-dessus ? Parce que tous nos événements sont expirés maintenant, selon cet article.

Vous pouvez suivre tous les événements, qu’ils soient expirés ou non, en utilisant la clause ON COMPLETION PRESERVE comme suit.

SQL
 sqlCopyCREATE EVENT TEST_PRESERVE_CLAUSE
ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 MINUTE
ON COMPLETION PRESERVE
DO
INSERT INTO tests(test_name,test_date)
VALUES('Testing Preserve Clause',NOW());

Que faire si vous voulez CREER un EVENT qui commence à partir du CURRENT_TIMESTAMP, s’exécute toutes les MINUTE, et expire après une HEURE. C’est ce qu’on appelle un événement récurrent.

Vous pouvez créer et pratiquer en utilisant le code suivant.

SQL
 sqlCopyCREATE EVENT RECURRING_EVENT
ON SCHEDULE EVERY 1 MINUTE
STARTS CURRENT_TIMESTAMP
ENDS CURRENT_TIMESTAMP + INTERVAL 1 HOUR
DO
INSERT INTO Tests(test_name,test_date)
 VALUES('This is recurring event test',NOW());

Dans le code ci-dessus, nous indiquons à EVENT l’heure de début et de fin en utilisant STARTS et ENDS. Vous pouvez également supprimer l’événement lorsque vous pensez qu’il n’est pas nécessaire maintenant.

Remplacez le name par votre nom ÉVÉNEMENT dans le code suivant.

SQL
 sqlCopyDROP EVENT [IF EXIST] name;

Prenons une autre situation où vous avez créé EVENT et confié le travail à un autre développeur. Serait-ce facile à comprendre sans COMMENTAIRE ? Bien sûr que non.

Créez EVENT et entraînez-vous en ajoutant COMMENT comme suit.

SQL
 sqlCopyCREATE EVENT RECURRING_EVENT
ON SCHEDULE EVERY 1 MINUTE
STARTS CURRENT_TIMESTAMP
ENDS CURRENT_TIMESTAMP + INTERVAL 1 HOUR
COMMENT 'It will add a new record every minture for one hour'
DO
INSERT INTO Tests(test_name,test_date)
 VALUES('This is recurring event test',NOW());

Nous avons appris le EVENT avec une seule ligne dans le corps EVENT. Et si vous avez plusieurs lignes ? Comprenons-le via l’exemple de code suivant.

SQL
 sqlCopydelimiter |
CREATE EVENT IF NOT EXISTS EVENT_FOR_UPDATE_COLUMNS_AND_DUMP
ON SCHEDULE AT current_timestamp
DO BEGIN
UPDATE student SET GENDER = 'M' WHERE student.GENDER = 'Male';
UPDATE student SET GENDER = 'F' WHERE student.GENDER = 'Female';
Table student INTO OUTFILE 'C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/file.csv' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\r\n';   
END |
delimiter ;

Vous verrez trois requêtes dans le corps EVENT du code fourni. Chaque fois que vous avez plus d’une ligne dans le corps EVENT, enfermez-les entre BEGIN et END, comme indiqué ci-dessus.

Nous avons créé un ÉVÉNEMENT qui commencera à partir du CURRENT_TIMESTAMP dans cet exemple. Il mettra à jour la colonne GENDER selon l’instruction UPDATE et exportera les données dans un fichier .CSV.

Pour exporter, vous devez utiliser ce chemin C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/file.csv (si vous avez installé MySQL dans C Drive). Sinon, vous obtiendrez l’erreur suivante.

SQL
 sqlCopyError Code: 1290. The MySQL server is running with the --secure-file-priv option so it cannot execute this statement

Si vous avez installé MySQL à un emplacement différent, utilisez EVENT scheduler, puis utilisez la commande suivante pour trouver le chemin où votre fichier sera exporté.

SQL
 sqlCopySHOW VARIABLES LIKE "secure_file_priv";  

Conclusion

Nous avons découvert le planificateur MySQL EVENT dans ce tutoriel.

Nous avons appris à créer des événements qui seront exécutés une fois, selon les intervalles fournis, une seule fois selon l’intervalle donné. Nous avons également exploré la création d’un événement avec de nombreuses lignes, la mise à jour des données, puis leur exportation dans un fichier séparé.

Mehvish Ashiq avatar Mehvish Ashiq avatar

Mehvish Ashiq is a former Java Programmer and a Data Science enthusiast who leverages her expertise to help others to learn and grow by creating interesting, useful, and reader-friendly content in Computer Programming, Data Science, and Technology.

LinkedIn GitHub Facebook