当前位置: 首页 > 面试题库 >

使用触发器插入后更新另一个表吗?

左丘积厚
2023-03-14
问题内容

我目前正在创建某种库存系统。

我在tbl1哪里保存项目。在中tbl1,我有一栏qty或剩余的可用库存。

tbl1:

id product  qty
1  mouse    10
2  keyboard 15
3  monitor  8

我还有一个表tbl2,我将所有交易保存在该表中。在这张桌子上有issued_qty

tbl2

id requested_by product  issued_qty
1  john         mouse    2

我的问题是如何tbl2在UPDATE的同时插入一行tbl1.qty (tbl1.qty - tbl2.issued_qty)

例如:当我在tbl2request_by,product和qty_issued中插入记录时,我希望tbl1可以自动更新。因为我们向John发出了2(数量)的鼠标。tbl1中的鼠标记录应自动减少到“
no”。的发行数量tbl2

我的想法是使用 TRIGGER

但不幸的是我没有成功..请你帮我这个忙..

谢谢。


问题答案:

如果您不希望有大量数据,请使用视图或存储过程即时计算并返回实际数量。从长远来看,这可能会减轻您的很多麻烦。

您的视图(实际上是视图)可能看起来像

CREATE VIEW vw_table2_sum AS
SELECT product, SUM(issued_qty) qty
  FROM Table2
 GROUP BY product;

CREATE VIEW vw_table1 AS
SELECT t.id, t.product, t.qty - COALESCE(v.qty, 0) qty
  FROM Table1 t LEFT JOIN vw_table2_sum v
    ON t.product = v.product;

当我们做

SELECT * FROM vw_table1;

会得到

| ID | 产品展示 数量
-----------------------
| 1 | 鼠标| 8 | -数量为当前数量
| 2 | 键盘| 15 |
| 3 | 监控器| 8 |

这是 SQLFiddle 演示

现在,如果您出于某种原因想要使用触发器来管理库存数量,则可能看起来像这样

CREATE TRIGGER tg_ai_table2
AFTER INSERT ON table2
FOR EACH ROW
  UPDATE Table1
     SET qty = qty - NEW.issued_qty
   WHERE product = NEW.product;

这是 SQLFiddle 演示



 类似资料:
  • 问题内容: 我正在尝试编写触发器,我有下表:BookingRequest: 状态表: 被占领的房间: 我需要一个触发器,如果​​将具有相同ID的请求插入到OccupiedRoom表中,它将把BookingReques中的状态更改为1,所以我尝试了类似的操作 而且它不起作用,所以任何建议都非常有用 问题答案: 尝试这个:

  • 我正在尝试创建一个触发器,该触发器将在更新另一个表之后更新一个表。我需要它,这样如果数字列中的一个数字被更新,那么这需要记录在另一个表中。这就是我到目前为止所拥有的。。 测试更新到表: 如您所见,我正在尝试将新插入的用户编号存储到一个变量中,然后该变量将用于填充user_changes表的insertednumber列。任何帮助都将不胜感激,谢谢!

  • 以下是我想做的: 当表中有新的 时,我需要通过设置 ' 来更新中的行 = ,以表示特定(旧)帐户已被编辑。 要求不是操作新插入的列,而是使用< code>pk = NEW.edit_on操作已经存在的列 但是,我无法更新同一个表: 请建议一个解决方法 PS:我已经完成了更新同一表后在触发器中更新表、插入到同一表中触发器mysql、在同一表上用插入后触发器更新以及在表上用Insert和update在

  • 问题内容: 我有一个Maximo数据库,该数据库具有无法更改的表结构。我希望在创建或更新主电子邮件地址时将其复制到PERSON表中。以下结构描述了PERSON表和EMAIL表 PERSON表: EMAIL表: 如您所见,这两个表在PERSONID列上链接。这是我希望触发器执行的操作: 如果EMAIL表已更新或插入了新行,那么如果ISPRIMARY字段,我想将EMAILADDRESS字段复制到PER

  • 问题内容: 这是我想做的事情: 当表中有新记录时,我需要通过设置以表示特定(旧)帐户已被编辑来更新where =中的行。 要求 不是 我要操纵 新插入的 列,而是要使用一个 已经存在的 列 但是,我无法更新同一张表: 请提出解决方法 PS:我已经走过了更新表触发器在同一个表更新后,插入到相同的表触发的mysql,更新与后同桌INSERT触发器和表后插入MySQL的触发器与插入和更新,但他们似乎没有

  • 问题内容: 我要在tableA上写一个插入触发器。它将使用相同的表但不同的列执行更新。执行此操作时出现错误。我的触发器是 我有一个应用程序将单独执行col2并将col1保持为空。因此,一旦插入行,我的触发器将为col1提供值。但是插入行时出现错误消息,提示“触发器失败且无效”。这该怎么做。TIA。 问题答案: 如果要分配一个简单的默认值,最简单的方法是使用DEFAULT子句在表上声明它。 这适用于