如何编写 MySQL 触发器以将行插入另一个表?
我想在一个表上创建一个 MySQL 触发器.本质上,我正在创建一个活动流并且需要记录用户的操作.当用户发表评论时,我希望触发该表上的数据库触发器并:
I'm looking to create a MySQL trigger on a table. Essentially, I'm creating an activity stream and need to log actions by users. When a user makes a comment, I want a database trigger on that table to fire and:
- 获取最后插入行的ID(评论行的ID).
- 使用最后插入行的数据对活动表执行 INSERT.
我基本上会复制这个触发器来删除评论.
I'll essentially replicate this trigger for deleting comments.
我的问题:
- LAST_INSERT_ID() 是获取 ID 的最佳方式吗?
- 如何正确存储最后插入的注释行中的数据以在插入到活动中"语句中使用?
- 我应该使用存储过程和触发器的组合吗?
- 触发器的基本结构是什么样的?
谢谢!我已经有几年没有接触过与数据库触发器、过程和函数有关的任何事情了.
Thanks! It's been a few years since I've touched anything to do with DB triggers, procedures and functions.
推荐答案
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;
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)
相关文章