Mysql 如何使SQL更新过程在计算中使用多个表?这样做会导致错误1054

Mysql 如何使SQL更新过程在计算中使用多个表?这样做会导致错误1054,mysql,sql,stored-procedures,triggers,mysql-error-1054,Mysql,Sql,Stored Procedures,Triggers,Mysql Error 1054,我定义了一个触发器及其过程,将库存图书的数量减少到一个单独的表中指定的数量(两者都是可变的)之后,它给出了过程中未知列的错误1054。 定义触发器和过程的代码如下: CREATE DEFINER=`root`@`localhost` TRIGGER reduce_available AFTER INSERT ON book_customer FOR EACH ROW UPDATE stock SET stock.current_amount = stock.current_amount-book

我定义了一个触发器及其过程,将库存图书的数量减少到一个单独的表中指定的数量(两者都是可变的)之后,它给出了过程中未知列的错误1054。 定义触发器和过程的代码如下:

CREATE DEFINER=`root`@`localhost` TRIGGER reduce_available
AFTER INSERT ON book_customer FOR EACH ROW
UPDATE stock SET stock.current_amount = stock.current_amount-book_customer.amount;
通常情况下,为了处理这种类型的交互,我会生成一个全新的表来记录购买和销售,并使用传统的有用数据。然而,在这种情况下,我没有这样一个表,我想知道如何处理它


一些澄清:

  • 该过程不打算更新多个表
  • 触发器只在一个表中触发,这是应该的
  • 我正在寻找一种方法来修复我的过程用法,而不是替代解决方案
其他信息:
  • 当我将“减号”值设置为1时,该代码起作用,这意味着未知表就是给出错误的表:
    更新库存集stock.current\u amount=stock.current\u amount-1
    我不能简单地这么做,因为我遇到了一个问题,一次不能向客户租用超过一本书,因为在同一个操作中没有一个“销售”表,它会产生权变依赖
  • 两个数据值(
    stock.current\u amount
    book\u customer.amount
    )的类型相同(INT)
  • 由于这个SQL程序是由于一个非常小的任务而生成的,所以我和我的团队都没有找到合适的“编码设计”,而是依赖于一种自我建立的方法。(也许这很重要,我不知道)
  • 我收到的错误是“1054”,但如果我弄乱了它,它会在“1063”和“11xx”之间变化,我似乎无法复制

编辑:
  • 解决了! 新手失误;我使用了一个没有“where”子句的未完成轴。
    我在搜索时没有找到它的原因是我不知道一开始可能有超过1个轴
  • 我忘了对林诺夫说很多感谢
  • 提高问题的可读性

  • 您是否只想参考
    新建
    ?如果是这样,我假设您只想更新
    stock
    中的一行,而不是所有行。您需要一个
    where
    子句

    CREATE DEFINER=`root`@`localhost` TRIGGER reduce_available
    AFTER INSERT ON book_customer FOR EACH ROW
    BEGIN
        UPDATE stock s
            SET s.current_amount = s.current_amount - new.amount
            WHERE s.book_id = new.book_id;
    END;
    

    您是否只想参考
    新建
    ?如果是这样,我假设您只想更新
    stock
    中的一行,而不是所有行。您需要一个
    where
    子句

    CREATE DEFINER=`root`@`localhost` TRIGGER reduce_available
    AFTER INSERT ON book_customer FOR EACH ROW
    BEGIN
        UPDATE stock s
            SET s.current_amount = s.current_amount - new.amount
            WHERE s.book_id = new.book_id;
    END;
    

    哦,我一点也不知道,它工作得很好!哦,我一点也不知道,它工作得很好!