mysql - 更新table2后如何更新table1?

标签 mysql triggers

DELIMITER $$

USE `gym`$$

DROP TRIGGER /*!50032 IF EXISTS */ `goods_input_total_amount-updateon-goods_input_price`$$

CREATE
    /*!50017 DEFINER = 'root'@'localhost' */
    TRIGGER `goods_input_total_amount-updateon-goods_input_price`
    AFTER UPDATE ON `goods_input_price` 
    FOR EACH ROW BEGIN
        DECLARE input_price INTEGER;
        SELECT price_goods_input_price INTO input_price FROM goods_input_price
        WHERE id_goods_input_price=NEW.id_goods_input_price LIMIT 1;
        SET new.goods_input_total_amount=goods_input_quantity*input_price;
    END;
$$

DELIMITER ;

我收到此错误消息:

Error Code: 1362 Updating of NEW row is not allowed in after trigger

最佳答案

消息非常明确。如果你想更新行,你需要一个before更新触发器:

DELIMITER $$

USE gym$$

DROP TRIGGER `goods_input_total_amount_updateon_goods_input_price`$$

CREATE TRIGGER `goods_input_total_amount_updateon_goods_input_price` 
BEFORE UPDATE ON goods_input_price
FOR EACH ROW
BEGIN
    DECLARE input_price INTEGER;
     SELECT price_goods_input_price INTO input_price
     FROM goods_input_price
     WHERE id_goods_input_price = NEW.id_goods_input_price
     LIMIT 1;

     SET new.goods_input_total_amount = goods_input_quantityinput_price;
 END; $$

DELIMITER ;

我倾向于将其写为:

BEGIN
     SELECT price_goods_input_price 
     INTO new.goods_input_total_amount
     FROM goods_input_price
     WHERE id_goods_input_price = NEW.id_goods_input_price
     LIMIT 1;
END; $$

关于mysql - 更新table2后如何更新table1?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45774402/

相关文章:

postgresql - 在同一事件上触发之前和之后?填充子表 PostgreSQL

postgresql - 数据库触发器限制 Postgres 中的最大表大小

php - 使用 MySQL 和 PHP 将 javascript 变量传递到数据库中

php - 嵌套数组到 3 级无序列表

php - SQL Buddy,mySQL LOAD DATA LOCAL INFILE 错误

mysql - 带有 LIKE 子查询的 SQL 查询

jquery - 如何使用双选择器调用触发器?

sql - postgresql 中的 ROLLBACK 事件触发器

mysql - SELECT *, sum() 等式仅返回一行

postgresql - 触发器过程的一致性(行触发器之前)Postgresql