Используя MySQL инициировал для входа всех изменений таблицы во вторичной таблице

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

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

Общую проблему, которую нельзя избежать, называют проблемой Two Generals в информатике. Вы можете прочитать об этом, чтобы лучше понять большую проблему. По сути, все компьютерные системы, в которых работают облачные функции, не могут на 100% надежно постоянно общаться друг с другом (из-за ошибок и потери данных), поэтому повторные попытки необходимы для обеспечения выполнения функции хотя бы раз, что лучше чем никогда.

32
задан Rob 22 April 2009 в 21:06
поделиться

1 ответ

Синтаксис вставки:

INSERT INTO table (columns_list) VALUES (values_list)

, поэтому ваша вставка будет выглядеть примерно так (я не эксперт по MySQL, но вы можете соответствовать запросу):

INSERT INTO data_tracking 
(`data_id` , `field` , `old_value` , `new_value` , `modified` ) 
VALUES 
(NEW.data_id, 'field1', OLD.field, NEW.field, CURRENT_DATETIME());

И повторите его для изменения field2 и field3

Я думаю, это будет полный триггер, попробуйте:

DELIMITER $$

DROP TRIGGER `update_data `$$

CREATE TRIGGER `update_data` AFTER UPDATE on `data_table`
FOR EACH ROW
BEGIN
    IF (NEW.field1 != OLD.field1) THEN
        INSERT INTO data_tracking 
            (`data_id` , `field` , `old_value` , `new_value` , `modified` ) 
        VALUES 
            (NEW.data_id, "field1", OLD.field1, NEW.field1, NOW());
    END IF;
    IF (NEW.field2 != OLD.field2) THEN
        INSERT INTO data_tracking 
            (`data_id` , `field` , `old_value` , `new_value` , `modified` ) 
        VALUES 
            (NEW.data_id, "field2", OLD.field2, NEW.field2, NOW());
    END IF;
    IF (NEW.field3 != OLD.field3) THEN
        INSERT INTO data_tracking 
            (`data_id` , `field` , `old_value` , `new_value` , `modified` ) 
        VALUES 
            (NEW.data_id, "field3", OLD.field3, NEW.field3, NOW());
    END IF;
END$$

DELIMITER ;
42
ответ дан 27 November 2019 в 21:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: