Maison >développement back-end >tutoriel php >Automation d'action avec MySQL Triggers

Automation d'action avec MySQL Triggers

William Shakespeare
William Shakespeareoriginal
2025-02-25 17:52:09180parcourir

Action Automation with MySQL Triggers

Points de base

  • Les déclencheurs MySQL simplifient les projets PHP avec des opérations automatisées telles que les requêtes de base de données, les opérations de fichiers et le traitement des données. Ils sont automatiquement appelés avant ou après les actions (insérer, mettre à jour, supprimer) sur la table.
  • Les déclencheurs ont été introduits dans MySQL version 5.0.2 et nécessitent la création d'autorisations correspondantes. Ils doivent avoir un nom unique dans la base de données où ils sont créés et ne seront licenciés que lorsque l'instruction SQL d'origine sera exécutée.
  • Les déclencheurs aident à maintenir l'intégrité d'un ensemble de tableaux, augmentent ou diminuent automatiquement les tables statistiques lorsque de nouveaux inserts / suppriment, enregistrent les modifications des données dans la base de données et maintiennent les tables synchronisées avec d'autres tables.
  • Les déclencheurs MySQL peuvent avoir un impact positif sur les performances du site Web et permettre aux développeurs d'éviter d'écrire beaucoup de code PHP pour gérer les opérations. Ils peuvent être utilisés pour effectuer automatiquement des tâches qui répondent à des changements de données spécifiques.

bon nombre du code que nous écrivons consiste à effectuer une opération. Qu'il s'agisse de requêtes de base de données, d'opérations de fichiers, de traitement des données, etc., tout cela est de permettre à nos scripts d'atteindre leur objectif. Mais avez-vous remarqué combien de code vous avez parfois besoin d'écrire pour vérifier une opération précédente? Un de mes projets récents a impliqué un problème plutôt lourd, ce qui m'a amené à utiliser d'innombrables requêtes juste pour m'assurer que toutes les données restent synchronisées dans mon tableau après chaque opération. C'est loin d'être élégant, et cela aurait dû être un script assez simple, mais il est devenu une page de requête complexe. D'un point de vue de maintenance, ce n'est pas possible, et c'est un cauchemar lorsque je veux mettre à jour une partie de la fonctionnalité de la page. C'est ici que le déclencheur MySQL va dans mon projet. En laissant MySQL faire plus de travail avec les déclencheurs, le côté PHP de mon projet est grandement simplifié. Par conséquent, le but de cet article est de vous donner une compréhension plus profonde de la création et de l'utilisation des déclencheurs de MySQL afin qu'à la fin de votre lecture, vous puissiez les utiliser dans votre propre projet.

Qu'est-ce qu'un déclencheur mysql?

Les déclencheurs ont été introduits dans MySQL version 5.0.2 et ne sont que l'une des fonctionnalités ajoutées de MySQL qui peuvent nous aider à simplifier notre travail en tant que développeurs. Ils sont automatiquement appelés avant ou après les actions (insérer, mettre à jour, supprimer) sur la table. Vous devez avoir les autorisations appropriées pour créer un déclencheur. Avant MySQL 5.1.6, vous aviez besoin de super autorisations, mais en 5.1.6, cela a changé et vous aviez besoin d'autorisations de déclenchement. En règle générale, un plan d'hébergement partagé ne permet pas de super car il est facilement abusé, vous pouvez donc ne pouvoir les utiliser que sur des serveurs que vous avez plus d'autorisations, comme un serveur dédié (virtuel) ou votre hôte local, selon la façon dont vous utilisez votre utilisation Version MySQL. Voici quelques autres instructions rapides sur les déclencheurs:

  • Ils doivent avoir un nom unique (insensible au cas) dans la base de données où ils ont été créés.
  • Un seul déclencheur avec le même événement (mise à jour / insérer / supprimer) et le temps (avant / après).
  • Lorsqu'une table est supprimée, le déclencheur qui y est associé est également supprimé.
  • Vous ne pouvez pas modifier explicitement les déclencheurs (contrairement aux événements) à l'aide de l'instruction alter. Vous devez supprimer le déclencheur et le recréer.
  • Les déclencheurs ne seront déclenchés que lorsque l'instruction SQL d'origine est exécutée;

Regardons maintenant la syntaxe de base du déclencheur en la décomposant en sa forme d'origine:

<code class="language-sql">CREATE TRIGGER TrigName [BEFORE|AFTER] [INSERT|UPDATE|DELETE] ON tableName
FOR EACH ROW
BEGIN
     #action(s) to perform
END</code>

Lorsque vous créez un déclencheur, vous pouvez choisir si cela se déclenche avant ou après que l'action se produise; Si vous souhaitez modifier les données entrantes entrant dans la base de données, vous avez déjà besoin. Cependant, si vous faites quelque chose à cause d'une action précédente, vous devez utiliser l'instruction After. L'opération qui déclenchera le déclencheur peut être insérée, mise à jour ou supprimer, car ces trois instructions sont les seules instructions qui entraîneront la modification des données du tableau.

appliquer le déclencheur à la situation réelle

Les déclencheurs sont très utiles dans de nombreux cas. Une utilisation bien connue consiste à maintenir l'intégrité d'un ensemble de tableaux en déclenchant la suppression des enregistrements obsolètes lorsque les clés étrangères ne sont pas utilisées. Ils peuvent également être utilisés pour augmenter ou diminuer automatiquement les tables statistiques lorsque de nouveaux inserts / supprimer, enregistrent les modifications des données dans la base de données, gardent les tables synchronisées avec d'autres tables, etc. Dans cet article, nous les utiliserons pour prétraiter certains calculs. C'est le cas que nous avons une entreprise qui loue ses salles pour 30 £ de l'heure. Ils enregistrent le nom, le début et la fin de chaque événement organisé dans la salle, puis calculent l'heure et les dépenses payables dans le tableau des revenus. Le nom et l'heure de début de l'événement sont initialement insérés dans la table de l'événement pour réserver le hall, puis le coût de location est mis à jour sur cette ligne uniquement après la fin de l'événement. La durée de l'événement (en minutes) doit être calculée, où l'heure de début sera soustraite de l'heure de fin, et les frais de location seront ensuite calculés en multipliant le temps total de 0,5 (£ 30 par heure, 50 pence par minute). Nous pouvons utiliser PHP pour effectuer des calculs de la durée et des dépenses des événements lors de la mise à jour des informations sur l'événement (en sélectionnant les données insérées, en calculant la durée et les dépenses de location, puis en insérant ou en mettant à jour les listes de revenus), ou nous pouvons simplement utiliser des déclencheurs pour automatiser ce processus et réduire un code PHP. Installons deux tables de base et insérons certaines données d'abonnement virtuelles dans l'événement pour démarrer l'opération.

<code class="language-sql">CREATE TABLE events (
    id INTEGER NOT NULL AUTO_INCREMENT,
    event_name VARCHAR(50) NOT NULL,
    event_start TIMESTAMP NOT NULL DEFAULT 0,
    event_end TIMESTAMP NOT NULL DEFAULT 0,
    PRIMARY KEY (id)
) ENGINE=INNODB;

CREATE TABLE revenue (
    id INTEGER NOT NULL AUTO_INCREMENT,
    event_id INTEGER NOT NULL,
    hire_time INTEGER NOT NULL,
    hire_fees FLOAT NOT NULL,
    PRIMARY KEY (id),
    FOREIGN KEY (event_id) REFERENCES events(id) ON DELETE CASCADE,
    UNIQUE (event_id)
)ENGINE=INNODB;

INSERT INTO events VALUES
    (NULL, 'Birthday Party', '2012-11-08 14:30:00', 0),
    (NULL, 'Wedding', '2012-12-02 13:00:00', 0);</code>

Après avoir configuré les deux tables, nous pouvons continuer à créer un déclencheur nommé CostCalc. Le déclencheur est défini après une mise à jour sur le tableau des événements, puis effectuer le calcul susmentionné. Il insère ou met à jour la liste des revenus (si l'ID d'événement préexistant est défini).

<code class="language-sql">CREATE TRIGGER TrigName [BEFORE|AFTER] [INSERT|UPDATE|DELETE] ON tableName
FOR EACH ROW
BEGIN
     #action(s) to perform
END</code>

Lors de la création d'un déclencheur (similaire aux événements et aux routines stockées), la première chose que nous devons faire est de spécifier un nouveau délimiteur qui représente la fin du déclencheur. Cela se fait à l'aide du mot clé Delimiter, suivi d'un symbole (ou symbole) personnalisé et nécessite que le déclencheur soit exécuté dans son ensemble, plutôt que MySQL exécute simplement les instructions internes seules. Nous spécifions ensuite le nom du déclencheur, son temps, son événement et le tableau sur lequel il sera défini pour être déclenché. Dans cet exemple, nous définissons le temps du déclencheur pour fonctionner après la mise à jour, car nous voulons exécuter le déclencheur uniquement après une mise à jour réussie; Sinon, nous répéterons l'enregistrement précédent de l'événement. Ensuite, nous utilisons l'instruction Begin ... End Compound pour s'adapter à la fonctionnalité du déclencheur. Le corps du déclencheur déclare d'abord deux variables: les lignes et le temps. Nous sélectionnons le nombre de lignes dans la table d'événements, où l'ID fait référence à la ligne qui vient d'être modifiée, et un (ou deux) des temps Event_Start et Event_end ont été modifiés, et le temps Event_end n'est pas égal à zéro. Il s'agit de clarifier si une action est requise dans le compte de résultat, car les frais de location ne peuvent être calculés que par ces modifications. Une fois que nous savons que nous pouvons calculer l'heure et les dépenses, nous définissons la variable de temps pour égaler le nombre de minutes du début à la fin de la colonne. En multipliant ce nombre de 0,5, nous pouvons également obtenir le coût de location. Étant donné que la colonne Event_ID est unique, nous ne pouvons avoir qu'un seul ID correspondant à la table d'événements; donc, nous utilisons le remplacement pour mettre à jour les lignes préexistantes dans la table (le cas échéant) ou insérer de nouvelles lignes (sinon). Dans l'instruction MySQL, vous pouvez également remarquer que les mots clés anciens et nouveaux sont utilisés dans les instructions sélectionnées et remplacent ci-dessus et dans les expressions des valeurs de variable temporelle. Votre utilisation de ces deux mots clés dépendra de l'événement dans votre situation et lorsque le déclencheur est déclenché.

  • Un nouveau mot-clé est utilisé pour accéder aux données entrantes entrant dans la base de données. Ceci n'est disponible que dans les instructions d'insertion et de mise à jour.
  • L'ancien mot-clé est utilisé pour accéder aux données actuelles à l'enregistrement avant que toute modification ne soit apportée à l'enregistrement. Ceci n'est disponible que dans les instructions de mise à jour et de suppression.

Le script PHP correspondant qui sera utilisé pour démarrer le déclencheur comprendra une classe (appelée EventHandler), ainsi que notre code d'appel client. La classe se connectera à notre base de données MySQL via PDO et contiendra une méthode UpdateEvent () qui sera appelée lorsque le contenu de l'événement doit être mis à jour.

<code class="language-sql">CREATE TRIGGER TrigName [BEFORE|AFTER] [INSERT|UPDATE|DELETE] ON tableName
FOR EACH ROW
BEGIN
     #action(s) to perform
END</code>

Nous créons d'abord notre classe EventHandler, où la propriété $ db est définie pour maintenir une instance de la classe PDO, qui est définie par une méthode de constructeur. Ensuite, nous procédons à notre méthode UpdateEvent (), où trois paramètres sont définis. Le premier paramètre spécifie la colonne que nous souhaitons mettre à jour dans la table d'événements et permet l'une des trois valeurs: nom, démarrage, fin. Le deuxième paramètre contient la valeur à insérer ou la valeur actuelle de la colonne mise à jour; Après avoir garanti que le nom de la colonne est valide, nous interrogeons notre tableau via une requête paramétrée et vérifions enfin si des lignes ont été mises à jour. Après avoir créé la classe, nous continuons à l'appeler. Nous passons une instance de l'objet PDO en tant que paramètre à la classe EventHandler. La méthode UpdateEvent () sera ensuite appelée quatre fois avec différentes valeurs pour montrer comment notre déclencheur réagira aux mises à jour effectuées sur le tableau des événements. Les deux premières mises à jour ne feront pas que notre déclencheur d'insérer ou de mettre à jour les lignes, car nous n'avons toujours pas les informations nécessaires pour calculer la durée de l'événement et les frais de location. Tout ce que nous avons fait, c'est mettre à jour le nom de l'événement et retarder son heure de début de deux jours. Cependant, les deux mises à jour suivantes nécessiteront la fonctionnalité de nos déclencheurs, car la première mise à jour définit l'heure de fin, la deuxième mise à jour redéfinit l'heure de fin comme une heure plus tard, entraînant un changement de durée, de sorte que les coûts de location ont également changé. C'est là que nous avons besoin de l'instruction Remplacer, car nous imposons des contraintes sur le tableau lors de la création du tableau, et nous ne pouvons avoir qu'un seul enregistrement par ID d'événement.

Conclusion

Les déclencheurs MySQL, s'ils sont utilisés correctement, peuvent non seulement avoir un impact positif sur les performances du site Web, mais également éviter d'écrire beaucoup de code PHP pour gérer de telles opérations. J'espère que vous les trouverez aussi utiles dans vos projets que dans mes projets, alors n'hésitez pas à utiliser les déclencheurs audacieusement! images de Fotolia

FAQ sur l'automatisation des opérations avec MySQL Triggers

Que sont les déclencheurs MySQL et comment cela fonctionne-t-il?

MySQL Trigger est un programme stocké qui est automatiquement appelé en réponse à des événements survenant dans un tableau (tels que l'insertion, la mise à jour ou la suppression). Les déclencheurs sont utilisés pour maintenir l'intégrité des informations dans la base de données et sont automatiquement appelés lorsque des opérations spécifiques se produisent sur le tableau. Ils peuvent être exécutés avant ou après un événement.

Comment créer un déclencheur mysql?

La création d'un déclencheur MySQL implique une instruction CREATE TRIGGER, qui inclut le nom du déclencheur, l'événement de déclenchement et l'instruction à exécuter lorsque l'événement se produit. Voici un exemple de base:

<code class="language-sql">CREATE TABLE events (
    id INTEGER NOT NULL AUTO_INCREMENT,
    event_name VARCHAR(50) NOT NULL,
    event_start TIMESTAMP NOT NULL DEFAULT 0,
    event_end TIMESTAMP NOT NULL DEFAULT 0,
    PRIMARY KEY (id)
) ENGINE=INNODB;

CREATE TABLE revenue (
    id INTEGER NOT NULL AUTO_INCREMENT,
    event_id INTEGER NOT NULL,
    hire_time INTEGER NOT NULL,
    hire_fees FLOAT NOT NULL,
    PRIMARY KEY (id),
    FOREIGN KEY (event_id) REFERENCES events(id) ON DELETE CASCADE,
    UNIQUE (event_id)
)ENGINE=INNODB;

INSERT INTO events VALUES
    (NULL, 'Birthday Party', '2012-11-08 14:30:00', 0),
    (NULL, 'Wedding', '2012-12-02 13:00:00', 0);</code>

Puis-je appeler un script PHP à partir d'un déclencheur MySQL?

ne peut pas être appelé directement. MySQL ne prend pas en charge l'appel des scripts PHP à partir de déclencheurs. Cependant, vous pouvez le faire indirectement en utilisant UDF (fonctions définies par l'utilisateur) ou à l'aide d'un système externe pour surveiller les modifications de la base de données, puis appeler un script PHP.

Quelle est la syntaxe du déclencheur MySQL?

La syntaxe pour créer un déclencheur dans MySQL est la suivante:

<code class="language-sql">CREATE TRIGGER TrigName [BEFORE|AFTER] [INSERT|UPDATE|DELETE] ON tableName
FOR EACH ROW
BEGIN
     #action(s) to perform
END</code>

Comment utiliser MySQL pour automatiser les tâches?

L'automatisation dans MySQL peut être réalisée par le biais de déclencheurs, de procédures stockées et d'événements. Les déclencheurs peuvent être utilisés pour automatiser les tâches qui doivent être effectuées en réponse à des changements de données spécifiques. Les procédures stockées vous permettent d'encapsuler une série de commandes en une seule routine appelable. Les événements sont des tâches qui fonctionnent selon le calendrier.

Quelles sont les limites des déclencheurs de MySQL?

Certaines limitations des déclencheurs MySQL incluent: ils ne peuvent être associés qu'à une seule table, ils ne peuvent pas renvoyer un ensemble de résultats, ils ne peuvent pas accepter les paramètres et ne peuvent pas être appelés directement comme des procédures stockées.

Comment déboguer les déclencheurs de MySQL?

Le débogage des déclencheurs MySQL peut être difficile car il n'y a pas de débogueur intégré. Cependant, vous pouvez utiliser des solutions de contournement, telles que l'insertion de valeurs dans des tables séparées pour suivre le flux d'exécution ou l'utilisation d'outils tiers comme MySQL Debugger.

MySQL peut-il déclencher des procédures stockées?

Oui. Cependant, vous devriez être prudent lorsque vous faites cela, car cela peut conduire à des chaînes complexes d'événements difficiles à gérer et à déboguer.

Comment supprimer le déclencheur mysql?

Vous pouvez supprimer le déclencheur MySQL à l'aide de l'instruction Drop Trigger suivie du nom du déclencheur. Par exemple:

<code class="language-sql">CREATE TABLE events (
    id INTEGER NOT NULL AUTO_INCREMENT,
    event_name VARCHAR(50) NOT NULL,
    event_start TIMESTAMP NOT NULL DEFAULT 0,
    event_end TIMESTAMP NOT NULL DEFAULT 0,
    PRIMARY KEY (id)
) ENGINE=INNODB;

CREATE TABLE revenue (
    id INTEGER NOT NULL AUTO_INCREMENT,
    event_id INTEGER NOT NULL,
    hire_time INTEGER NOT NULL,
    hire_fees FLOAT NOT NULL,
    PRIMARY KEY (id),
    FOREIGN KEY (event_id) REFERENCES events(id) ON DELETE CASCADE,
    UNIQUE (event_id)
)ENGINE=INNODB;

INSERT INTO events VALUES
    (NULL, 'Birthday Party', '2012-11-08 14:30:00', 0),
    (NULL, 'Wedding', '2012-12-02 13:00:00', 0);</code>

Les déclencheurs MySQL peuvent-ils être utilisés pour la vérification des données?

Oui. Vous pouvez créer un déclencheur pour vérifier si les données sont insérées ou mises à jour dans le tableau et agir en conséquence.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn