Проверьте, была ли установлена ​​переменная из SELECT INTO в MySQL Triggers - PullRequest
0 голосов
/ 04 октября 2018

Я не уверен, что на этот вопрос уже ответили или нет, но я не смог найти хорошего решения.

У меня есть триггер для моей таблицы (source_table), где она заполнит другуюстол (target_table).Однако при заполнении target_table мне нужно получить значение из другой таблицы (intermediate_table).Но мне нужно INSERT INTO my target_table, только если в intermediate_table.

доступно значение из source_table. Мой текущий триггер выглядит следующим образом.

DROP TRIGGER IF EXISTS after_source_table_insert;
DELIMITER $$
CREATE TRIGGER after_source_table_insert AFTER INSERT
 ON source_table
 FOR EACH ROW
 BEGIN
    DECLARE my_id INT(11);
    SELECT some_id INTO my_id FROM intermediate_table it WHERE it.some_id = NEW.another_id;
    IF my_id <> NULL THEN -- CONDITION ---
      INSERT INTO `target_table` (`target_id`, `updated_at`)
      VALUES (my_id, NOW())
      ON DUPLICATE KEY UPDATE   `updated_at` = NOW();
    END IF;
 END;
$$

ОднакоCONDITION не работает, даже когда my_id допустим.

Каков наилучший способ выполнить запрос INSERT, если SELECT заполняет my_id?

Использует ли здесь select FOUND_ROWS(); хороший вариант?

ПРИМЕЧАНИЕ : я не хочу делать SELECT более одного раза, потому что таблицы очень большие.

1 Ответ

0 голосов
/ 04 октября 2018
  • NULL значения можно сравнивать, используя IS NULL или IS NOT NULL.
  • Кроме того, я установил значение по умолчанию my_id в NULL, чтобы избежать непреднамеренных случаев,Как правило, рекомендуется устанавливать значения по умолчанию для объявленных переменных.

Попробуйте выполнить следующее:

DECLARE my_id INT(11) DEFAULT NULL;
SELECT some_id INTO my_id FROM intermediate_table it WHERE it.some_id = NEW.another_id;
IF my_id IS NOT NULL THEN -- CONDITION ---
  INSERT INTO `target_table` (`target_id`, `updated_at`)
  VALUES (my_id, NOW())
  ON DUPLICATE KEY UPDATE   `updated_at` = NOW();
END IF;
...