web-dev-qa-db-fra.com

MySQL-avant de mettre à jour la valeur de la colonne A à la valeur de la colonne B Si la colonne A doit être mise à jour

J'ai un événement planifié nocturne qui met à jour toutes les lignes de la table 'Products' avec le dernier "Unit_price" à partir d'une table de liste de prix où "Prix_List.active" est> = le curdit (). Ce que je dois faire, c'est créer un déclencheur pour la table des produits pour définir le champ 'Last_Prix' sur l'ancienne unité_price avant la mise à jour uniquement sur les lignes où l'unité_price change. Est-ce possible.

Événement programmé:

CREATE EVENT `update_active_price` ON SCHEDULE EVERY 1 DAY 
    STARTS '2015-02-09 00:00:00' 
    ON COMPLETION PRESERVE 
    ENABLE COMMENT 'updates nightly at midnight' 
    DO 
        UPDATE products p 
        JOIN price_list pr ON p.product_id = pr.product_id
        SET p.unit_price = pr.amount
        WHERE active_date = CURDATE();

Actuellement de déclenchement non fonctionnel:

CREATE TRIGGER `update_last_price` BEFORE UPDATE ON `products`
FOR EACH ROW UPDATE products p
SET p.last_price = p.unit_price;
2
JBLucky24

Ajustez la syntaxe de la gâchette

DROP TRIGGER IF EXISTS `update_last_price`;
CREATE TRIGGER `update_last_price`
BEFORE UPDATE ON `products`
FOR EACH ROW
SET NEW.last_price = OLD.unit_price;

ou si la gâchette doit avoir plusieurs lignes, faites-le

DROP TRIGGER IF EXISTS `update_last_price`;
DELIMITER $$
CREATE TRIGGER `update_last_price`
BEFORE UPDATE ON `products`
FOR EACH ROW
BEGIN
    SET NEW.last_price = OLD.unit_price;
END $$
DELIMITER ;
3
RolandoMySQLDBA