2012-04-23 23 views
5

Ho cercato su Internet e ho capito che l'unico modo per cambiare il corpo di una procedura di archiviazione è eliminarlo e crearlo nuovamente. Non sembra esserci nulla di sbagliato nel meccanismo, ma se ho un'applicazione client (o migliaia di client distribuiti) che continua a richiamare la procedura di archiviazione per aggiornare alcuni dati sul database del server, l'eliminazione della procedura comporterebbe la perdita e/o il danneggiamento dei dati.MySQL: Come modificare le stored procedure atomicamente?

Sto pensando se c'è una sintassi come "CREATE PROCEDURE SE EXIST ..." o qualcosa funziona in modo simile, quindi l'operazione di aggiornamento dovrebbe essere eseguita senza intoppi. Tuttavia non ho trovato che tale cosa sia disponibile in MySQL.

Quindi, come pensate che questo problema possa essere affrontato? Pensieri fantastici?

+0

Poiché MySQL non ha DDL transazionale, non penso che ciò sia possibile. –

risposta

3

Non è possibile modificare una procedura memorizzata (sebbene sia possibile modificarne le caratteristiche) in MySQL. Dalla pagina ALTER PROCEDURE.

Questa istruzione può essere utilizzata per modificare le caratteristiche di una procedura memorizzata . È possibile specificare più di una modifica in una istruzione ALTER PROCEDURE . Tuttavia, non è possibile modificare i parametri o il corpo di una procedura memorizzata utilizzando questa istruzione; per apportare tali modifiche, è necessario rilasciare e ricreare la procedura utilizzando PROCEDURA DROP e CREATE PROCEDURA.

Mentre è possibile perdere dati durante l'esecuzione di questo aggiornamento (anche se dovrebbe essere una finestra relativamente piccola), è improbabile che i dati vengano danneggiati. Darei un'occhiata alle tecnologie di accodamento dei messaggi se il sistema deve essere protetto dalla perdita di dati dovuta ai tempi di inattività del database.

+0

Per dati danneggiati intendevo l'integrità del database ... Hai un buon punto, quindi, invece di mettere tutto il lavoro sul database, possiamo avere un livello separato in cima per trascurare la transazione dei dati. –

Problemi correlati