创建触发器:通过将数据插入另一个表行来更新表列
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;
,它起作用了。以上是关于创建触发器:通过将数据插入另一个表行来更新表列的主要内容,如果未能解决你的问题,请参考以下文章
触发器 当往一个表中插入数据时,更新另一个表,报语法错误...