Нужна помощь в настройке триггера mysql

#mysql #triggers

#mysql #триггеры

Вопрос:

Это мой текущий триггер:

 DELIMITER $$
CREATE DEFINER=`root`@`127.0.0.1` TRIGGER `unique_visit_new_campaign` AFTER INSERT ON `unique_visit` FOR EACH ROW
BEGIN
    DECLARE done INT DEFAULT FALSE;
    DECLARE pixel_id int;
    DECLARE campaign_id varchar(45);
    DECLARE cur CURSOR FOR SELECT id FROM pixels;
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
    OPEN cur;
            ins_loop: LOOP
                FETCH cur INTO pixel_id;
                IF done THEN
                    LEAVE ins_loop;
                END IF;
                INSERT IGNORE INTO pixels_campaign (campaign_id , pixel_id , date) VALUES (NEW.campaign_id ,pixel_id, current_timestamp);
            END LOOP;
        CLOSE cur;
END
  

Мне нужно, чтобы он НЕ ЗАПУСКАЛСЯ, когда new.campaign_id пуст или равен строке {campaign_id}

Я пытался использовать MySQL IF, но безуспешно.

Кроме того, он автоматически увеличивается, даже если уже есть идентификатор кампании (когда он игнорируется). как я могу остановить это?

Ответ №1:

Вы пробовали это?

 DELIMITER $$
CREATE DEFINER=`root`@`127.0.0.1` TRIGGER `unique_visit_new_campaign` AFTER INSERT ON `unique_visit` FOR EACH ROW
BEGIN
    DECLARE done INT DEFAULT FALSE;
    DECLARE pixel_id int;
    DECLARE campaign_id varchar(45);
    DECLARE cur CURSOR FOR SELECT id FROM pixels;
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

    IF new.campaign = '' or new.campaign = '{campaign_id}' or new.campaign is null THEN

        OPEN cur;
                ins_loop: LOOP
                    FETCH cur INTO pixel_id;
                    IF done THEN
                        LEAVE ins_loop;
                    END IF;
                    INSERT IGNORE INTO pixels_campaign (campaign_id , pixel_id , date) VALUES (NEW.campaign_id ,pixel_id, current_timestamp);
                END LOOP;
            CLOSE cur;
    END IF

END