插入时是否可以传递值?

6kkfgxo0  于 2021-06-25  发布在  Mysql
关注(0)|答案(1)|浏览(359)

我有这样一个触发器:

IF ( value > new.value ) THEN

    ...

END IF

它将被执行 AFTER INSERT . 我需要通过 value (它是一个数字)插入时,因为使用它进入触发器的条件。你知道我怎么通过吗?
注意,目前它是硬编码为触发器式的 IF ( 5 > new.value ) THEN . 我想做的就是传递这个 5 插入时动态执行。

yqyhoc1h

yqyhoc1h1#

不,没有定义的机制将参数传递给触发器。
我唯一能想到的就是一个用户定义的变量(但我并不想去那里),或者一个 SELECT 语句从表中检索值。
我们可以在会话中设置用户定义的变量:

SET @value_for_after_insert_trigger = 5 ;

然后执行插入

INSERT INTO mytable (...) VALUES (...)

当触发after insert触发器时(对于每行),触发器主体可以引用用户定义的变量。例如:

DECLARE ln_value INTEGER;
   SET ln_value = @value_for_after_insert_trigger;

那我们就可以做了

IF ( ln_value > NEW.value ) THEN

注意,我们不能保证会话中的其他语句不会修改用户定义的变量。例如,一个 BEFORE INSERT 触发器可能执行以下语句:

SET @value_for_after_insert_trigger = 42 ;

... 覆盖以前存储的值。这个 AFTER INSERT 触发器将读取当前分配的值,得到42,而不是我们前面指定的5。我们不能保证 AFTER INSERT 触发器不会执行某些修改值的操作。

SET @value_for_after_insert_trigger = @value_for_after_insert_trigger + 1;

影响后续行的触发器执行。
我不主张这是一种设计。我会避免使用这样的用户定义变量。
另一种选择是使用 SELECT 语句从表中查询值。

相关问题