检查 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 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;
我不确定这是否已经得到解答,但我找不到好的解决方案。
我的 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 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;