Mysql 如何使SQL更新过程在计算中使用多个表?这样做会导致错误1054
我定义了一个触发器及其过程,将库存图书的数量减少到一个单独的表中指定的数量(两者都是可变的)之后,它给出了过程中未知列的错误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
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
)的类型相同(INT)book\u customer.amount
- 由于这个SQL程序是由于一个非常小的任务而生成的,所以我和我的团队都没有找到合适的“编码设计”,而是依赖于一种自我建立的方法。(也许这很重要,我不知道)
- 我收到的错误是“1054”,但如果我弄乱了它,它会在“1063”和“11xx”之间变化,我似乎无法复制
编辑:
我在搜索时没有找到它的原因是我不知道一开始可能有超过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;
哦,我一点也不知道,它工作得很好!哦,我一点也不知道,它工作得很好!