MySQL-可以调用函数来执行触发器操作吗?

MySQL-可以调用函数来执行触发器操作吗?,mysql,function,triggers,Mysql,Function,Triggers,在我的模式中,我有许多带有需要填充的公共字段的表。这是基本控制字段,如下所示: id_db_user date_creation date_last_update 我已经完成了两个触发器来填充此字段: -- Trigger DDL Statements delimiter | CREATE TRIGGER control_insert BEFORE INSERT ON EZT_SOCIETIES FOR EACH ROW BEGIN SET NEW.id_db_user

在我的模式中,我有许多带有需要填充的公共字段的表。这是基本控制字段,如下所示:

id_db_user
date_creation
date_last_update
我已经完成了两个触发器来填充此字段:

-- Trigger DDL Statements
delimiter |
CREATE TRIGGER control_insert BEFORE INSERT ON EZT_SOCIETIES

  FOR EACH ROW BEGIN

    SET NEW.id_db_user    = current_user;

    SET NEW.date_creation = current_timestamp;

  END;
| delimiter ;


delimiter |
CREATE TRIGGER control_update BEFORE UPDATE ON EZT_SOCIETIES

  FOR EACH ROW BEGIN

    SET NEW.date_last_update = current_timestamp;

  END;
| delimiter ;
我的问题是:我可以写一些函数来调用触发器内部的操作吗?大概是这样的:

function fn_control_insert
    SET NEW.id_db_user    = current_user;
    SET NEW.date_creation = current_timestamp;
然后在触发器中调用此函数,如:

delimiter |
CREATE TRIGGER control_insert BEFORE INSERT ON EZT_SOCIETIES

  FOR EACH ROW BEGIN

    call fn_control_insert;

  END;
| delimiter ;
这可以在MySQL中实现吗


非常感谢,

不,这是不可能的,不幸的是,您也不能将新的和旧的作为参数传递,函数参数也不能为OUT或INOUT(即可写),因此简短的回答是No

您可以从触发器调用函数(前提是该函数不违反任何MySQL触发器限制,例如修改触发器附加到的表),但您必须将该函数传递给每个需要读取的新字段或旧字段,而函数将无法写入它们-您只能从函数返回一个值。

  • 使用“更新当前时间戳”子句将
    date\u creation
    字段声明为时间戳。该字段将使用INSERT或UPDATE语句上的当前_时间戳值自动更新。更多信息-

  • control\u insert
    trigger-
    Set NEW.id\u db\u user=当前用户中设置NEW.id\u db\u用户值

  • 删除
    control\u update
    触发器


嗨,米格尔,谢谢你的回复。我一直在读关于这个主题的书。使用过程并在插入/更新后触发器中将新值传递给过程中调用该过程是一个选项?谢谢,您可以,但是INOUT和OUT参数不起作用,并且该过程不能用于解决MySQL对触发器(如递归)的限制。