MySQL триггеры между двумя базами данных - PullRequest
0 голосов
/ 04 декабря 2018

У меня есть две таблицы в двух базах данных.Один сайт предназначен для клиентов, а другой для филиалов, поэтому у меня есть два зарегистрированных количества.Я использую триггер MySQL, но получаю ошибку

"Невозможно обновить таблицу product_option_value в сохраненной функции / триггере, поскольку она уже используется оператором ..."

когда я обновляю количество на testkosmeb_adtest. product_option_value.(база данных 2)

Что не так и как я могу это исправить?

Мои триггеры:

В базе данных 1

DELIMITER $$    
CREATE TRIGGER `before_update_option_quantity`
    BEFORE UPDATE ON `testkosmeb_adcom`.`product_option_value`
    FOR EACH ROW
BEGIN
    DECLARE newquantity INT default 0;
    DECLARE khacctv INT default 0;
    SET newquantity = NEW.quantity - NEW.ctv_quantity;
    SET khacctv = NEW.ctv_quantity - OLD.ctv_quantity;
    IF newquantity < 0 AND khacctv = 0 THEN
        SET NEW.ctv_quantity = NEW.quantity;
    END IF;

    IF NEW.ctv_quantity <> OLD.ctv_quantity AND NEW.update_trig <> 1 THEN
        UPDATE `testkosmeb_adtest`.`product_option_value`
        SET quantity = NEW.ctv_quantity,
        update_trig = 1
        WHERE product_option_value_id = NEW.product_option_value_id;
    END IF;
    SET NEW.update_trig = 0;

END$$
DELIMITER ;




-- Xóa quantity
DROP TRIGGER IF EXISTS before_delete_option_quantity;
DELIMITER $$    
CREATE TRIGGER `before_delete_option_quantity`
    AFTER UPDATE ON `testkosmeb_adcom`.`product_option_value`
    FOR EACH ROW
BEGIN
    DELETE FROM `testkosmeb_adtest`.`product_option_value`
    WHERE product_option_value_id = OLD.product_option_value_id;

END$$
DELIMITER ;


-- THÊM quantity
DROP TRIGGER IF EXISTS before_insert_option_quantity;

DELIMITER $$    
CREATE TRIGGER `before_insert_option_quantity`
    AFTER INSERT ON `testkosmeb_adcom`.`product_option_value`
    FOR EACH ROW
BEGIN
    INSERT INTO `testkosmeb_adtest`.`product_option_value` SET
    product_option_value_id = NEW.product_option_value_id,
    product_id = NEW.product_id,
    option_id = NEW.option_id,
    update_trig = 1,
    option_value_id = NEW.option_value_id,
    sku = NEW.sku,
    quantity = NEW.ctv_quantity,
    subtract = NEW.subtract,
    price = NEW.price,
    price_prefix = NEW.price_prefix,
    points = NEW.points,
    weight = NEW.weight,
    weight_prefix = NEW.weight_prefix,
    costing_method = NEW.costing_method,
    cost_amount = NEW.cost_amount,
    cost = NEW.cost,
    cost_prefix = NEW.cost_prefix;

END$$
DELIMITER ;

В базе данных 2

DROP TRIGGER IF EXISTS before_update_option_quantity_ctv;
DELIMITER $$    
CREATE TRIGGER `before_update_option_quantity_ctv`
    BEFORE UPDATE ON `testkosmeb_adtest`.`product_option_value`
    FOR EACH ROW
BEGIN
    DECLARE thaydoi INT default 0;
    SET thaydoi = NEW.quantity - OLD.quantity;

    IF thaydoi <> 0  AND NEW.update_trig <> 1 THEN

    UPDATE `testkosmeb_adcom`.`product_option_value`
    SET quantity = quantity + thaydoi,
    ctv_quantity = ctv_quantity + thaydoi,
    update_trig = 1
    WHERE product_option_value_id = NEW.product_option_value_id;
    END IF;
    SET NEW.update_trig = 0;

END$$
DELIMITER ;
...