检查 MySQL 触发器中的 SELECT INTO 是否设置了变量

Check if a variable was set from SELECT INTO in MySQL Triggers

我不确定这是否已经得到解答,但我找不到好的解决方案。

我的 table (source_table) 有一个触发器,它将填充另一个 table (target_table)。但是,在填充 target_table 时,我需要从另一个 table (intermediate_table) 获取一个值。但是我需要 INSERT INTO 我的 target_table 仅当来自 source_table 的值在 intermediate_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 有效。

如果 SELECT 填充 my_id,执行 INSERT 查询的最佳方法是什么?

在这里使用 select FOUND_ROWS(); 是一个好的选择吗?

注意:我不想多次执行 SELECT 因为 table 非常大。

  • NULL 值可以使用 IS NULLIS 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;