【问题标题】:Created TRIGGER for two tables but getting error message为两个表创建了 TRIGGER 但收到错误消息
【发布时间】:2013-11-21 10:21:55
【问题描述】:

我有 2 张桌子:

  1. ORDERS - 存储我购物车中的所有信息
  2. 项目 - 商店 ID |码 |产品 |价格 |销售价格 |库存

我想出了下面的触发器,当订单以“订单”的形式插入数据库时​​,我希望它在“项目表”中将“库存”数量更新为 -1。

CREATE TRIGGER `order_updater` AFTER INSERT ON `orders`
FOR EACH ROW UPDATE items
SET inventory = inventory - 1
WHERE id = new.id
END;

当我尝试将其添加到 phpMyAdmin 的触发器中时,我不断收到此消息:

处理您的请求时出现一个或多个错误:

以下查询失败:“CREATE TRIGGER orer_update BEFORE INSERT ON items FOR EACH ROW CREATE TRIGGER order_updater AFTER INSERT ON orders FOR EACH ROW UPDATE items SET inventory = inventory - 1 WHERE id = new .id END;"

MySQL 说:#1303 - Can't create a TRIGGER from within another stored routine.

  1. 可以用这个触发器完成吗?
  2. 触发器会更新特定项目还是所有项目?
  3. 触发器可以添加到产品.htm页面还是需要在phpMyAdmin中?

我不确定代码是否完全正确,因为我是新手,任何指针都将不胜感激。


*更新: phpMyAdmin :我从页面上复制了这个:版本信息:4.0.8,最新稳定版本:4.0.9*

【问题讨论】:

    标签: mysql triggers phpmyadmin


    【解决方案1】:

    尝试类似:

    DELIMITER $$
    
    CREATE TRIGGER `order_updater` AFTER INSERT ON `orders`
    FOR EACH ROW
    BEGIN
      UPDATE `items`
      SET `inventory` = `inventory` - 1
      WHERE `id` = new.`id`;
    END$$
    
    DELIMITER ;
    

    更新

    您使用的是哪个版本的 phpMyAdmin?下面的例子,使用版本 phpMyAdmin 4.1.0-beta2,没有问题。

    【讨论】:

    • Cheers 仍然收到错误消息:在处理您的请求时:以下查询失败:“CREATE TRIGGER order_updater BEFORE INSERT ON items FOR EACH ROW DELIMITER $$ CREATE TRIGGER order_updater AFTER INSERT ON orders 每行开始更新 items SET inventory = inventory - 1 其中id = new.id; END$$ DELIMITER ;" MySQL 说:#1064 - 你的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“$$ CREATE TRIGGER order_updater AFTER INSERT ON orders FOR EACH ROW BEG”附近使用正确的语法
    • 您是否尝试在其他触发器中创建触发器?
    • 我真的不知道该怎么做,但根本不存在触发器。我正在尝试创建一个来执行我上面概述的操作。不能在另一个触发器中创建触发器吗?
    • 您不能在触发器中创建触发器。这是一个简单的SQL Fiddle,它展示了如何创建触发器。
    • wchiquito - 为之欢呼,但我仍然不聪明:-(你如何使用它
    猜你喜欢
    • 2017-11-10
    • 2021-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-17
    • 2022-12-16
    • 1970-01-01
    • 2023-02-24
    相关资源
    最近更新 更多