gpt4 book ai didi

mysql - 创建插入更新后的触发器

转载 作者:行者123 更新时间:2023-11-29 06:19:47 24 4
gpt4 key购买 nike

我有一个包含 bal_load int 列的配置文件表。我还有 2 个表,即带有金额列的债务和付款。在向债务插入一个值后,我需要触发 profile.bal_load 的当前值和插入的债务。金额如果插入来自付款则减去。

PROFILE 的表格

+--+--------+
|ID|BAL_LOAD|
+--+--------+
|1 |500 |
|2 |300 |
+--+--------+

如果在债务表上发生这样的插入,

债务

+--+----------+------+
|ID|PROFILE_ID|AMOUNT|
+--+----------+------+
|1 |1 |20 |
+--+----------+------+

然后触发器应该添加带有债务金额的 bal_load。

简介

+--+--------+
|ID|BAL_LOAD|
+--+--------+
|1 |520 | -->500+20
|2 |300 |
+--+--------+

如果这样的插入发生在付款表,

付款

+--+----------+------+
|ID|PROFILE_ID|AMOUNT|
+--+----------+------+
|1 |2 |220 |
+--+----------+------+

然后触发器应该用付款金额减去 bal_load。

简介

+--+--------+
|ID|BAL_LOAD|
+--+--------+
|1 |520 |
|2 |80 | -->300-220
+--+--------+

这是我插入债务金额的憔悴触发器

create trigger bal_load_debt after insert on debt
for each row
begin
update profile
set bal_load = bal_load + amount
where profile.id = debt.profile_id;
end

并插入付款金额

create trigger bal_load_payment after insert on payment
for each row
begin
update profile
set bal_load = bal_load + amount
where profile.id = payment.profile_id;
end

请帮忙:)

为了更新,我用了这个

CREATE TRIGGER bal_load_debt
AFTER INSERT
ON debt
FOR EACH ROW
UPDATE Profile
SET bal_load = bal_load + NEW.amount
WHERE profile.id = debt.profile_id

我收到了这个错误信息

1235 - This version of MySQL doesn't yet support 'multiple triggers with the same action time and event for one table'

最佳答案

你的触发器有几个地方是错误的:

  1. SQL Server 没有for each row 选项
  2. 您需要定义此触发器位于哪个
  3. 触发器将为该语句触发一次,但该语句可能插入(或更新)多行,您需要处理该问题

所以你的触发器应该看起来像这样:

CREATE TRIGGER bal_load_debt 
ON dbo.Debt
AFTER INSERT
AS
UPDATE dbo.Profile
SET bal_load = bal_load + SUM(i.amount)
FROM Inserted i -- newly inserted rows
WHERE Profile.id = i.profile_id;

新插入的行(可以是多个!)在Inserted伪表(与触发器附加到的表具有完全相同的结构)中可用) - 您可以在触发器中从该表中获取有关这些行的信息。

UPDATE 的情况下,Deleted 伪表将包含旧值(在 UPDATE),而 Inserted 伪表将包含新值(在 UPDATE 之后)- 因此您可以在一个AFTER UPDATE 触发器。

阅读 CREATE TRIGGER 命令中各种选项的所有详细信息 in the freely available MSDN SQL Server Books Online documentation这应该始终是您寻求 SQL Server 特定帮助的第一个地方

关于mysql - 创建插入更新后的触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33922623/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com