如何在MySQL中的触发器中执行/调用批处理文件?可能吗?

时间:2016-10-28 12:03:55

标签: mysql

我正在尝试在MySQL的触发器中执行批处理文件。每当在表中插入数据时,应调用Insert On Trigger并执行/调用Trigger中给出的Batch文件。这个场景在MySQL中是否可行?我在SQL Server中这样做了。在SQL Server中,它是可能的。

2 个答案:

答案 0 :(得分:1)

默认情况下,无法在MySQL查询或存储过程中运行外部命令(启动外部进程)。

但是,您可以使用user defined functions (UDF)来实现此目的。使用UDF,您可以在C中编写自定义函数,然后可以在任何查询或存储过程中使用。这样的函数显然也可以运行外部进程,命令行可能作为参数接收。

幸运的是,这已经实现了,但您必须安装它。您可以在http://www.mysqludf.org/上搜索,例如this one将允许您执行操作系统命令。

但请注意,这可能会带来严重的安全风险。如果您的应用程序中存在SQL注入漏洞,那么加载这些UDF会大大增加服务器完全泄露的风险(而不仅仅是完整的应用程序泄露)。

答案 1 :(得分:1)

UDF的另一种方法是使用“插入后触发器”填充单独的表(可能是内存中),然后使用cron作业定期轮询表,为每行调用脚本。 操作成功完成后,您的脚本还将负责删除该行。

作为一个好处,脚本可以在与数据库不同的机器上运行。

保持触发器实现尽可能简单通常是一种很好的做法,因为它可以极大地影响每个插入的性能。

您还可以查看有关MySQL触发器的此questionthis FAQ 页面。