2012-04-23 9 views
5

Przeszukałem Internet i zrozumiałem, że jedynym sposobem na zmianę treści procedury sklepu jest opuszczenie i ponowne utworzenie. Wygląda na to, że mechanizm działa nieprawidłowo, ale jeśli mam aplikację kliencką (lub tysiące klientów rozproszonych), która nadal wywołuje procedurę sklepu, aby zaktualizować niektóre dane w bazie danych serwera, zniesienie tej procedury spowoduje utratę danych i/lub uszkodzenie.MySQL: Jak modyfikować procedury składowane atomowo?

Zastanawiam się, czy istnieje taka składnia jak "CREATE PROCEDURE IF EXIST ..." lub coś działa podobnie, więc operacja aktualizacji zostanie przeprowadzona płynnie. Jednak nie znalazłem czegoś takiego w MySQL.

Jak myślicie, dlaczego ten problem można rozwiązać? Niesamowite myśli?

+0

Ponieważ MySQL nie ma transakcyjnego DDL, nie sądzę, aby było to możliwe. –

Odpowiedz

3

Nie można zmodyfikować procedury składowanej (choć można zmienić jej charakterystykę) w MySQL. Ze strony ALTER PROCEDURE.

Oświadczenie to można wykorzystać do zmiany charakterystyki przechowywanej procedury . Więcej niż jedna zmiana może być określona w instrukcji ALTER PROCEDURE . Jednak nie można zmienić parametrów lub treści przechowywanej procedury za pomocą tej instrukcji; aby wprowadzić takie zmiany, należy usunąć i ponownie utworzyć procedurę, używając procedury DROP PROCEDURE i CREATE PROCEDURE.

Chociaż można utracić dane podczas wykonywania tej aktualizacji (choć powinno to być stosunkowo małe okno), jest mało prawdopodobne, że dane zostaną uszkodzone. Chciałbym rzucić okiem na technologie kolejkowania wiadomości, jeśli system musi być chroniony przed utratą danych z przestoju bazy danych.

+0

Przez uszkodzenie danych rozumiałem integralność bazy danych ... Masz dobry punkt, więc zamiast umieszczać całą pracę w bazie danych, możemy mieć oddzielną warstwę na górze, aby przeoczyć transakcję danych. –

Powiązane problemy