web-dev-qa-db-fra.com

Comment programmer un déclencheur MySQL pour insérer une ligne dans une autre table?

Je cherche à créer un déclencheur MySQL sur une table. Essentiellement, je crée un flux d'activité et j'ai besoin de consigner les actions des utilisateurs. Lorsqu'un utilisateur fait un commentaire, je veux qu'un déclencheur de base de données sur cette table se déclenche et:

  1. Saisissez l'ID de la dernière ligne insérée (l'ID de la ligne de commentaire).
  2. effectuer un INSERT dans une table d'activités, en utilisant les données de la dernière ligne insérée.

Je vais essentiellement reproduire ce déclencheur pour supprimer les commentaires.

Questions que j'avais:

  1. LAST_INSERT_ID () est-il le meilleur moyen de récupérer l'identifiant?
  2. Comment puis-je stocker correctement les données de la dernière ligne de commentaire insérée pour les utiliser dans mon instruction "INSÉRER dans les activités"?
  3. Dois-je utiliser une combinaison de procédures stockées ainsi que le déclencheur?
  4. À quoi ressemblerait la structure de base du déclencheur?

Merci! Cela fait quelques années que je n'ai rien touché aux déclencheurs, procédures et fonctions DB.

29
Eric
drop table if exists comments;
create table comments
(
comment_id int unsigned not null auto_increment primary key,
user_id int unsigned not null
)
engine=innodb;

drop table if exists activities;
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;

delimiter #

create trigger comments_after_ins_trig after insert on comments
for each row
begin
  insert into activities (comment_id, user_id) values (new.comment_id, new.user_id);
end#

delimiter ;

insert into comments (user_id) values (1),(2);

select * from comments;
select * from activities;

Modifier:

mysql> \. d:\foo.sql

Database changed
Query OK, 0 rows affected (0.10 sec)

Query OK, 0 rows affected (0.30 sec)

Query OK, 0 rows affected (0.11 sec)

Query OK, 0 rows affected (0.35 sec)

Query OK, 0 rows affected (0.07 sec)

Query OK, 2 rows affected (0.03 sec)
Records: 2  Duplicates: 0  Warnings: 0

+------------+---------+
| comment_id | user_id |
+------------+---------+
|          1 |       1 |
|          2 |       2 |
+------------+---------+
2 rows in set (0.00 sec)

+-------------+------------+---------+
| activity_id | comment_id | user_id |
+-------------+------------+---------+
|           1 |          1 |       1 |
|           2 |          2 |       2 |
+-------------+------------+---------+
2 rows in set (0.00 sec)
42
Jon Black