当前位置:  开发笔记 > 后端 > 正文

添加数据库中的新行时,必须调用外部命令行程序

如何解决《添加数据库中的新行时,必须调用外部命令行程序》经验,为你挑选了1个好方法。

当一个新行被添加到数据库中的一个表时,MySQL数据库是否可以调用外部exe文件?

我需要监视数据库中的更改,因此在进行相关更改时,我需要在数据库外部执行一些批处理作业.



1> David Grayso..:

Chad Birch使用MySQL触发器和用户定义的函数有一个好主意.您可以在MySQL CREATE TRIGGER语法参考中找到更多信息.

但是你确定在插入行时需要立即调用可执行文件吗?看起来这种方法很容易失败,因为MySQL可能会同时产生多个可执行文件的实例.如果您的可执行文件失败,那么将不会记录哪些行尚未处理,哪些行尚未处理.如果MySQL正在等待您的可执行文件完成,那么插入行可能会非常慢.此外,如果Chad Birch是对的,那么将不得不重新编译MySQL,所以听起来很难.

我不是直接从MySQL调用可执行文件,而是使用触发器简单地记录行被INSERTED或UPDATED的事实:在数据库中记录该信息,或者使用现有表中的新列或者使用名为say的全新表database_changes.然后创建一个外部程序,定期从数据库中读取信息,处理它,并将其标记为已完成.

您的具体解决方案将取决于外部程序实际需要的参数.

如果你的外部程序需要知道哪些行被插入,那么您的解决方案可能是这样的:建立一个叫做新表database_changes与领域date,table_namerow_id,以及所有其他表,作出这样的触发器:

CREATE TRIGGER `my_trigger`
AFTER INSERT ON `table_name`
FOR EACH ROW BEGIN
  INSERT INTO `database_changes` (`date`, `table_name`, `row_id`)
  VALUES (NOW(), "table_name", NEW.id)
END;

然后您的批处理脚本可以执行以下操作:

    选择database_changes表中的第一行.

    处理它.

    去掉它.

    重复1-3直到database_changes空.

使用这种方法,您可以更好地控制数据处理的时间和方式,并且可以轻松检查数据是否实际得到处理(只需检查database_changes表是否为空).


没有什么可以阻止你将它与执行唤醒监视程序的exec相结合.因此,显示器可以每5分钟进行一次自动检查,或检查何时收到信号.
推荐阅读
kikokikolove
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有