gpt4 book ai didi

MySQL触发器根据另一个表中的条目从一个表添加/删除

转载 作者:行者123 更新时间:2023-11-29 15:17:22 25 4
gpt4 key购买 nike

所以,我有两个表:转移和库存。

我想做的是,当某些内容输入到转移表中时,它将更改库存表中的条目。

我需要的一个例子是:

假设有一个人名叫琼斯博士,另一个人名叫史密斯博士。琼斯博士的“总计”中有 30 英镑,史密斯博士有 10 英镑。现在,假设琼斯博士给了史密斯博士 10 英镑,我需要将库存表设置为琼斯博士的账户总额为 -10 英镑,史密斯博士的账户总额为 +10 英镑。因此,当您刷新表格时,它会在总列中显示史密斯博士的余额为 20 英镑,琼斯博士的余额现在也为 20 英镑。

我想通过触发器来做到这一点。我目前有以下内容:

DELIMITER $$
CREATE TRIGGER update_inventory_through_transfer AFTER INSERT ON Transfers
FOR EACH ROW
BEGIN
UPDATE Inventory
SET Inventory.total = SELECT SUM (IF (owner = NEW.owner, -total, total)) FROM Transfers WHERE owner = NEW.owner
END$$
DELIMITER;

谁能帮我解决我哪里出错了?谢谢

最佳答案

从你的问题中不清楚你的数据库的结构,但假设转移知道所有者以及资金被转移给谁,那么触发器应该包含2个简单的更新,因为触发器是FOR EACH ROW,所以不需要这么总和转账。

drop table if exists transfer,inventory;

create table transfer (owner int,total int,tfr_to int);
create table inventory (owner int,total int);

insert into inventory values
(1,30),(2,10);

drop trigger if exists t;
DELIMITER $$
CREATE TRIGGER t AFTER INSERT ON transfer
FOR EACH ROW
BEGIN
UPDATE inventory t1
SET t1.total = t1.total + new.total
where t1.owner = new.tfr_to;
update inventory t1
set t1.total = t1.total - new.total
where t1.owner = new.owner;
END $$
DELIMITER ;

insert into transfer values (1,10,2);

select * from transfer;

+-------+-------+--------+
| owner | total | tfr_to |
+-------+-------+--------+
| 1 | 10 | 2 |
+-------+-------+--------+
1 row in set (0.02 sec)

select * from inventory;

+-------+-------+
| owner | total |
+-------+-------+
| 1 | 20 |
| 2 | 20 |
+-------+-------+
2 rows in set (0.00 sec)

关于MySQL触发器根据另一个表中的条目从一个表添加/删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59611949/

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