2012-04-23 11 views
5

He buscado a través de Internet y entiendo que la única manera de cambiar el cuerpo de un procedimiento de tienda es soltar y crear de nuevo. Parece que no hay nada de malo en el mecanismo, pero si tengo una aplicación cliente (o miles de clientes distribuidos) que sigue invocando el procedimiento de almacenamiento para actualizar algunos datos en la base de datos del servidor, abandonar el procedimiento daría como resultado la pérdida y/o corrupción de datos.MySQL: ¿Cómo modificar los procedimientos almacenados atómicamente?

Estoy pensando si hay una sintaxis como "CREAR PROCEDIMIENTO SI EXISTIR ..." o algo funciona de manera similar para que la operación de actualización se lleve a cabo sin problemas. Sin embargo, no encontré tal cosa disponible en MySQL.

¿Cómo piensan que se puede abordar este problema? ¿Pensamientos increíbles?

+0

Como MySQL no tiene DDL transaccional, no creo que esto sea posible. –

Respuesta

3

No se puede modificar un procedimiento almacenado (aunque puede cambiar sus características) en MySQL. De la página ALTER PROCEDURE.

Esta instrucción se puede utilizar para cambiar las características de un procedimiento almacenado . Se puede especificar más de un cambio en una declaración ALTER PROCEDURE . Sin embargo, no puede cambiar los parámetros o el cuerpo de un procedimiento almacenado utilizando esta instrucción; para realizar dichos cambios, debe eliminar y volver a crear el procedimiento utilizando PROCEDIMIENTO DE CAÍDA y CREAR PROCEDIMIENTO.

Si bien es posible perder datos mientras realiza esta actualización (aunque debería ser una ventana relativamente pequeña), es poco probable que sus datos se dañen. Echaré un vistazo a las tecnologías de puesta en cola de mensajes si su sistema necesita protección contra la pérdida de datos debido al tiempo de inactividad de la base de datos.

+0

Al corromper los datos me refiero a la integridad de la base de datos ... Tiene un buen punto allí, así que en lugar de poner todo el trabajo en la base de datos, podemos tener una capa separada para pasar por alto la transacción de datos. –

Cuestiones relacionadas