如何编写 MySQL 触发器以将行插入另一个表?

How to program a MySQL trigger to insert row into another table?(如何编写 MySQL 触发器以将行插入另一个表?)
本文介绍了如何编写 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:

  1. 获取最后插入行的ID(评论行的ID).
  2. 使用最后插入行的数据对活动表执行 INSERT.

我基本上会复制这个触发器来删除评论.

I'll essentially replicate this trigger for deleting comments.

我的问题:

  1. LAST_INSERT_ID() 是获取 ID 的最佳方式吗?
  2. 如何正确存储最后插入的注释行中的数据以在插入到活动中"语句中使用?
  3. 我应该使用存储过程和触发器的组合吗?
  4. 触发器的基本结构是什么样的?

谢谢!我已经有几年没有接触过与数据库触发器、过程和函数有关的任何事情了.

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)

这篇关于如何编写 MySQL 触发器以将行插入另一个表?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

本站部分内容来源互联网,如果有图片或者内容侵犯了您的权益,请联系我们,我们会在确认后第一时间进行删除!

相关文档推荐

Can#39;t Create Entity Data Model - using MySql and EF6(无法创建实体数据模型 - 使用 MySql 和 EF6)
MySQL select with CONCAT condition(MySQL选择与CONCAT条件)
Capitalize first letter of each word, in existing table(将现有表格中每个单词的首字母大写)
How to retrieve SQL result column value using column name in Python?(如何在 Python 中使用列名检索 SQL 结果列值?)
Update row with data from another row in the same table(使用同一表中另一行的数据更新行)
Exporting results of a Mysql query to excel?(将 Mysql 查询的结果导出到 excel?)