创建触发器:通过将数据插入另一个表行来更新表列

Posted

技术标签:

【中文标题】创建触发器:通过将数据插入另一个表行来更新表列【英文标题】:Create Trigger : update table column by inserting data into another table rows 【发布时间】:2021-08-05 04:03:22 【问题描述】:

请帮我创建触发器, 我有 2 张桌子

data
+---------+------------+-------+-------+
| id | info_id | rate  | qty   | total |
+----+---------+------------+----------+
| 80 |    10   | 150   |   5   |  750  |
+----+---------+-------+-------+-------+
| 81 |    10   | 50    |   5   |  250  |
+--------------+-------+-------+-------+

info
+---------+---------------+------------+
| id  |  name  |  gtotal  |  dated     |
+-----+--------+----------+------------+
| 10  |  Hari  |     NULL | 2021-05-15 |
+---------+------------+---------------+

我想通过 phpmyadmin 创建一个触发器,一旦插入数据,那么 info.gtotal 将通过从表名数据匹配的 info_id 添加 data.total 来更新。

如果数据也发生更新,触发因素是什么。我只想创建两个触发器。

我是新手,请帮助我。接受任何帮助。

【问题讨论】:

【参考方案1】:

您需要创建两个触发器,一个用于插入,另一个用于更新。

CREATE TRIGGER `insert_trigger`
AFTER INSERT ON `data`
FOR EACH ROW

UPDATE info
SET gtotal = gtotal + new.total
WHERE id = new.info_id;

这里new.info_id 会有新插入记录的info_id 值

CREATE TRIGGER `update_trigger`
AFTER UPDATE ON `data`
FOR EACH ROW

UPDATE info
SET gtotal = (gtotal - old.total) + new.total
WHERE id = new.info_id;

这里 old.total 将具有更新前记录的总值。 new.total 是更新后的总值。

由于您还没有传达更新后要做什么,我添加了从旧总数中减去总数并添加新总值的逻辑。根据您的要求更改它。

您也可以在 phpmyadmin 中使用 GUI 创建这些触发器。您必须在菜单栏中选择触发器并添加触发器定义。

【讨论】:

非常感谢您的详细回复。我爱它。首先它不起作用,但我只是添加了new.total,它起作用了。最终代码变成了UPDATE info SET gtotal = gtotal + new.total WHERE id = new.info_id;,它起作用了。

以上是关于创建触发器:通过将数据插入另一个表行来更新表列的主要内容,如果未能解决你的问题,请参考以下文章

触发器-当一个表更新时,将数据插入另一张表中

插入触发器操作时创建触发器语法错误

触发器 当往一个表中插入数据时,更新另一个表,报语法错误...

将数据插入另一个表时触发以更新带有时间戳的表

Oracle 建立触发器比较两张表相同字段的数据,再更新另一个字段

SQL Server在复制时触发