Maison  >  Article  >  base de données  >  Comment utiliser les déclencheurs MySQL pour insérer des lignes dans une autre table ?

Comment utiliser les déclencheurs MySQL pour insérer des lignes dans une autre table ?

original
2024-11-22 21:03:17738parcourir

How to Use MySQL Triggers to Insert Rows into Another Table?

Insérer des lignes dans une autre table à l'aide d'un déclencheur MySQL

Dans les systèmes de gestion de bases de données relationnelles comme MySQL, les déclencheurs jouent un rôle central dans l'automatisation de certaines actions de base de données en réponse à des événements spécifiques, tels que l'insertion, la suppression ou la modification de données. Dans ce contexte, abordons le sujet de la création d'un déclencheur qui insère une ligne dans une autre table lors de l'insertion d'une ligne dans une table donnée.

Comprendre le problème

Le l'objectif est de créer un déclencheur MySQL sur une table "commentaires" qui surveille chaque événement d'insertion de ligne. Lorsqu'une nouvelle ligne de commentaire est insérée, le déclencheur doit effectuer les tâches suivantes :

  1. Récupérer l'ID de la ligne de commentaire nouvellement insérée.
  2. Utiliser l'ID récupéré pour effectuer une opération INSERT dans un tableau "activités", transférant les données pertinentes de la ligne de commentaires.

Déclencheur Structure

La structure de base du déclencheur pour implémenter ces fonctionnalités implique les éléments suivants :

CREATE TRIGGER <trigger_name> AFTER INSERT ON <source_table>
FOR EACH ROW
BEGIN
    -- Retrieve the ID of the newly inserted row
    DECLARE last_insert_id INT;
    SET last_insert_id = LAST_INSERT_ID();

    -- Insert data into the "activities" table
    INSERT INTO <target_table> (column_list)
    VALUES (new.column1, new.column2, ..., last_insert_id);
END

Mise en œuvre du déclencheur

Pour démontrer la implémentation, considérons l'exemple suivant :

-- Create the "comments" and "activities" tables
CREATE TABLE comments (
    comment_id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    user_id INT UNSIGNED NOT NULL
) ENGINE=INNODB;

CREATE TABLE activities (
    activity_id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    comment_id INT UNSIGNED NOT NULL,
    user_id INT UNSIGNED NOT NULL
) ENGINE=INNODB;

-- Create the trigger to insert data into the "activities" table
CREATE TRIGGER comments_after_ins_trig AFTER INSERT ON comments
FOR EACH ROW
BEGIN
    -- Retrieve the ID of the newly inserted comment row
    DECLARE last_insert_id INT;
    SET last_insert_id = LAST_INSERT_ID();

    -- Insert data into the "activities" table
    INSERT INTO activities (comment_id, user_id)
    VALUES (new.comment_id, new.user_id);
END;

-- Insert some data into the "comments" table
INSERT INTO comments (user_id) VALUES (1), (2);

-- Query the "comments" and "activities" tables to observe the results
SELECT * FROM comments;
SELECT * FROM activities;

Lors de l'exécution des requêtes, vous remarquerez que pour chaque ligne de commentaire insérée dans le tableau "commentaires", une ligne correspondante est automatiquement insérée dans le tableau "activités". Cela démontre l'efficacité du déclencheur pour obtenir le résultat souhaité.

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