Planificateur d'événements ou définir une minuterie dans MySQL
-
MySQL
Event
et son importance - Planificateur d’événement ou définir une minuterie dans MySQL
- Conclusion
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
.
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.
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 :
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.
Créons le EVENT
suivant pour comprendre Événement ponctuel
. L’exemple de code est donné ci-dessous.
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 :
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.
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.
Utilisez le code suivant pour voir combien d’événements sont créés et programmés.
sqlCopySHOW EVENTS FROM classicmodels;
Production :
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.
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.
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.
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.
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.
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.
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é.
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é.