2011-08-28 15 views
6

Zastanawiam się, czy istnieje coś takiego jak odpowiednik funkcji wywołania zwrotnego za pomocą mysql po INSERT lub UPDATE, które mogłyby zwrócić mi wiersz # i być może wartości takich wierszy.Oddzwonienie do MySQL - czy jest coś takiego?

+3

jak i gdzie trzeba to wartości, które zostaną zwrócony? –

+0

Czy próbujesz [symulować klauzulę "WYJŚCIA"] (http://stackoverflow.com/q/5817414/73226)? –

+0

zobacz również: http://stackoverflow.com/questions/933565/get-auto-increment-value-with-mysql-query –

Odpowiedz

4

Nie jestem świadomy żadnego oddzwaniania, jak mówisz, ale na pewno z twojej aplikacji wywołującej możesz pobrać ostatni wstawiony identyfikator w przypadku, gdy go nie określiłeś, a db wygenerował wartość automatycznego przyrostu. Inne wartości, które powinieneś już znać, ponieważ je wstawiłeś.

Jeśli chcesz poznać te wartości na serwerze bazy danych, możesz użyć wyzwalacza SQL, który jest wykonywany przy każdej wstawce, dzięki czemu możesz wykonać więcej przetwarzania na nowo wstawionym rekordzie, na przykład napisać coś w innej tabeli itp.

+0

jak mogę uzyskać ten ostatni identyfikator? ponieważ kwerenda wstawiania nie zwraca (o ile mi wiadomo) wartości oprócz sukcesu lub niepowodzenia. –

+0

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

+1

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

7

Można utworzyć triggers, które są wywoływane przy wstawianiu i aktualizacji. Nie zwracają wartości, ale mogą ustawiać zmienne, które można odczytać poza nimi.

+0

Dziękujemy! Dostałem się do Google, szukając "wywołania zwrotnego MySQL", aby znaleźć termin "wyzwalacz", ponieważ jestem pewien, że zrobiło to wielu innych. – maurice

2

To nie jest dostępne w MySQL w obecnym stanie. Myślę, że są dwie metody osiągnięcia tego celu:

  1. Musiałbyś to zasymulować za pomocą sondowania - raczej brzydka metoda, łatwa w programowaniu, ale trudna na serwerze.

  2. Zobacz Does MySQL permit callbacks in C such that when a change happens, I can be notified? - napisz funkcję zdefiniowaną przez użytkownika, która może powiadomić zarejestrowanego detektora za pomocą jakiejś opatentowanej metody tworzenia. Trudniejsze w programowaniu, łatwe na serwerze. W tym przypadku upewnij się, że twój UDF jest solidny, nie zamarza, przekazując powiadomienie słuchaczowi, który mógł umrzeć, itp.
Byłby to przydatny ogólny UDF dla MySQL i przyniósłby coś, czego konsekwentnie brakowało w porównaniu Firebird/Interbase, które nazywają zdarzeniami, nie należy mylić z wydarzeniami czasowymi MySQL. Z drugiej strony, funkcja zdarzeń czasowych MySQL jest czymś, czego Firebird & brakowało, gdy ostatnio na nie patrzyłem.

Zobacz to na Firebird opisu zdarzenia w przypadku (lub później czytelnik) zdecyduje się to zrobić za pośrednictwem UDF - to dobry projekt Spec zmierzać do: http://www.janus-software.com/fbmanual/manual.php?book=php&topic=49

Powiązane problemy