2011-08-28 79 views
6

我想知道是否有这样的事情,作为一个回调函数使用MySQL后,可能会返回行#和可能返回这样的行的值的INSERT或更新后的等效。MySQL回调 - 有没有这样的事情?

+3

如何以及在哪里,你需要这个值是回? –

+0

你想[模拟'OUTPUT'子句](http://stackoverflow.com/q/5817414/73226)? –

+0

看到这个以及:http://stackoverflow.com/questions/933565/get-auto-increment-value-with-mysql-query –

回答

4

我不知道有任何回调,但您肯定会从您的调用应用程序中检索最后插入的ID,以防您没有指定它并且该数据库已生成自动递增值。您应该已经知道的其他值,因为您已经插入了它们。

如果您需要知道数据库服务器中的这些值,则可以在每次插入时执行SQL触发器,以便您可以对新插入的记录执行更多处理,例如在另一个表中写入某些内容等。 。

+0

我怎么能得到最后的ID?因为插入查询不会返回(据我所知)除了成功或失败之外的值。 –

+0

http://stackoverflow.com/questions/933565/get-auto-increment-value-with-mysql-query –

+1

@Itai Sagi调用[last_indert_id())](http://dev.mysql.com/doc/ refman/5.5/en/information-functions.html#function_last-insert-id) –

7

您可以创建在插​​入和更新时被调用的triggers。他们不会返回值,但他们可以设置您可以在其外读取的变量。

+0

谢谢!我通过谷歌搜索“MySQL回调”来找到术语“触发器”,因为我相信很多其他人已经完成了。 – maurice

2

这在MySQL中并不适用。我认为有两种方法可以实现这一点:

  1. 你必须用轮询来模拟它 - 一种相当难看的方法,在编程上很容易,但在服务器上很难。

  2. 请参阅Does MySQL permit callbacks in C such that when a change happens, I can be notified? - 编写一个用户定义的函数,该函数可以使用您的设计的某种专有方法通知注册的侦听器。在程序员身上更容易,在服务器上很容易。在这种情况下,请确保您的UDF是健壮的,在向可能已经去世的侦听器传递通知时不会冻结等。
这将是一个方便的通用UDF for MySQL,并带来它一直缺乏的东西到Firebird/Interbase,他们称之为事件,不要与MySQL定时事件混淆。另一方面MySQL的定时事件功能是Firebird & Interbase上次看到它们时缺少的。

,以防万一火鸟事件描述你(或稍后阅读器)决定通过UDF做到这一点请参阅本 - 这是一个很好的设计规范,瞄准:http://www.janus-software.com/fbmanual/manual.php?book=php&topic=49

相关问题