jack_home 2013-10-11 04:19 采纳率: 0%
浏览 1176

Mysql数据库触发器执行不成功

Mysql数据库中有order、orderitem和goods三张表,其中order与orderitem通过order的ID字段与orderitem的orderid字段关联;其中goods与orderitem通过goods的ID字段与orderitem的goodsid字段关联;现在想做一个触发器,当一个订单被确认的时候,该订单中所有产品的剩余数量和出售数量做相应的改变,order表isvalid字段的值有其他值变为Y的时候更新goods表中store和salecount值,请问写入下的触发器为什么不能实现目的呢,另外在脚本中提示已经创建成功怎么通过SELECT * FROM information_schema.TRIGGERS;查询不到触发器呢?

delimiter ||
drop trigger if exists updatestore||
create trigger updatestore after update on order for each row
begin
declare numorder int(11);
set numorder = (select count(count) from orderitem where orderid = old.id);
if new.isvalid ='Y' and old.isvalid !='Y' then
update goods set store = store - @numorder, salecount = salecount + @numorder where id in (select goodsid from zsorderitem where orderid = old.id);
end if;
if new.isvalid !='Y' and old.isvalid ='Y' then
update goods set store = store + @numorder, salecount = salecount - @numorder where id in (select goodsid from orderitem where orderid = old.id);
end if;
end||

  • 写回答

1条回答

  • ChatGPTᴼᴾᴱᴺᴬᴵ 2023-03-22 14:43
    关注

    该回答引用ChatGPT-3.5

    从你的触发器代码中,我注意到两个问题。


    首先,你定义了一个名为numorder的局部变量,但在你的更新语句中却使用了一个名为@numorder的全局变量。这将导致语法错误并阻止触发器正常执行。你需要将所有使用@numorder的地方替换为numorder。


    其次,你的触发器定义包含了一个语法错误,应该在创建触发器后添加分号;来结束语句,如下所示:

    delimiter ||
    drop trigger if exists updatestore||
    create trigger updatestore after update on order for each row
    begin
    declare numorder int(11);
    set numorder = (select count(*) from orderitem where orderid = old.id);
    if new.isvalid ='Y' and old.isvalid !='Y' then
    update goods set store = store - numorder, salecount = salecount + numorder where id in (select goodsid from zsorderitem where orderid = old.id);
    end if;
    if new.isvalid !='Y' and old.isvalid ='Y' then
    update goods set store = store + numorder, salecount = salecount - numorder where id in (select goodsid from orderitem where orderid = old.id);
    end if;
    end; ||
    

    关于触发器无法成功执行的问题,你需要检查以下几个方面:

    • 触发器是否被激活。确保在创建触发器时使用了CREATE TRIGGER语句,并将其状态设置为“启用”。

    • 触发器是否正确定义。在创建触发器后,可以使用SHOW TRIGGERS或SELECT * FROM information_schema.TRIGGERS查询触发器的信息。确保触发器的名称、表和事件定义正确。

    • 触发器代码是否正确。如果代码中存在语法错误或逻辑错误,触发器将无法正常执行。可以使用SHOW ERRORS或查看MySQL错误日志来检查错误信息。

    希望这些提示能帮助你解决问题。

    评论

报告相同问题?

悬赏问题

  • ¥15 使用C#,asp.net读取Excel文件并保存到Oracle数据库
  • ¥15 C# datagridview 单元格显示进度及值
  • ¥15 thinkphp6配合social login单点登录问题
  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配