【问题标题】:ERROR 1193 (HY000): Unknown system variable while Creating a triggerERROR 1193 (HY000): 创建触发器时未知系统变量
【发布时间】:2012-08-17 12:31:14
【问题描述】:

大家好,我打算为 MySQL 表创建一个触发器,以便在将值插入表后,将 exp_sales 列设置为 qnty_received 值 * sell_price 但我收到此错误:

错误 1193 (HY000):未知系统变量“exp_sales”

这是我的查询:

delimiter $$
Create trigger tsales after insert on Store_info_table
for each row
set exp_sales = qnty_received * selling_price;
END$$

有什么问题,创建触发器的最佳方法是什么,以便在插入数量和销售价格后,exp_sales(Total) 的字段更新为正确的值?

【问题讨论】:

    标签: mysql triggers


    【解决方案1】:

    如果我没有正确理解 exp_sales 是您要更新的列名:

    delimiter $$
    Create trigger tsales after insert on Store_info_table
    for each row
        update Store_info_table
        set exp_sales = NEW.qnty_received * NEW.selling_price
        where id = NEW.id;
    END$$
    

    更好的方法是使用INSERT INTO ON DUPLICATE KEY UPDATE

    INSERT INTO table_name(...)VALUES(...) 
           ON DUPLICATE KEY SET exp_sales = qnty_received * selling_price;
    

    【讨论】:

    • 我得到了这个异常java.sql.SQLException: Can't update table 'Store_info_table' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
    • 不可能更新写在同一张表上的触发器内的同一张表。或者,您可以尝试第二种方法。
    【解决方案2】:

    如果我理解正确,您想在插入后更新记录的字段。试试

    delimiter $$
    Create trigger tsales after insert on Store_info_table
    for each row
    begin
        UPDATE Store_info_table 
        SET exp_sales = NEW.qnty_received * NEW.selling_price
        WHERE id = NEW.id;
    END;
    $$
    

    【讨论】:

      【解决方案3】:

      你没有忘记 NEW 关键字吗?

      试试这个 -

      SET NEW.exp_sales = NEW.qnty_received * NEW.selling_price;
      

      但是,我认为你不应该这样做,因为你总是可以在 SELECT 查询中计算“总”值。

      【讨论】:

        猜你喜欢
        • 2023-04-06
        • 1970-01-01
        • 2013-03-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多