gpt4 book ai didi

mysql - 为什么在 MySQL 触发器查询中出现语法错误?

转载 作者:行者123 更新时间:2023-11-29 15:34:52 24 4
gpt4 key购买 nike

我已经学会了Oracle SQL中的触发器,但不太熟悉MySQL。我试图将触发器命令从 Oracle 转换为 MySQL。首先,我找不到 when 语句,而是找到了 if else 。这是我写的:

create trigger overdraft 
after update on account
for each row
begin
if account.balance < 0 then
insert into borrower(select customer_name, account_number from depositor where new.account_number=depositor.account_number);
insert into loan(select new.account_number, new.branch_name, new.balance);
update account set balance = 0 where account.account_number = new.account_number;
end if;
end;

但是我遇到了三个语法错误,首先是在左括号处的第一个插入语句末尾,显示“语句不完整,需要:','”。另外两个位于每个 end 上,表示“在此位置结束无效:期待 BEGIN、EOF,....”。我的代码有什么问题吗?我很难弄清楚。

最佳答案

有几件事。 分隔符可能是其中之一:

delimiter $$

create trigger overdraft before update on account
for each row
begin
if new.balance < 0 then
insert into borrower (customer_name, account_number) -- column list here
select d.customer_name, d.account_number
from depositor d
where new.account_number = d.account_number;

insert into loan (account_number, branch_name, balance) -- column list here
select new.account_number, new.branch_name, new.balance;

set new.balance = 0;
end if;
end;$$

delimiter ;

注释:

  • 需要分隔符,以便触发器的定义不会以第一个分号结束。
  • 无法理解初始 if (account.balance) 中的引用,因为 account 未定义。
  • 您想要使用触发器更新行中的余额。因此,您需要一个更新前触发器,而不是更新后触发器。
  • 在表中插入行时,应始终列出要插入的列。我已经推测了上面的列名称。

关于mysql - 为什么在 MySQL 触发器查询中出现语法错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58353170/

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