2011-08-28 51 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

相關問題