2009-04-04 6 views
5

¿Es cierto que no puedo editar un disparador de MySQL, tengo que soltarlo y crear uno nuevo?¿Es cierto que no puedo editar un disparador de MySQL, tengo que soltarlo y crear uno nuevo?

Además, al ser un recién llegado relativo a los desencadenantes, parece que parecen ser susceptibles de causar datos 'erróneos'. Por ejemplo, podría querer disparar un disparador (insertar datos en otra tabla) después de un tipo particular de consulta de actualización, pero no de otros.

¡Algún consejo aquí recibido con gratitud!

Respuesta

6

Editar: Sí, es cierto que las versiones 5.ñ y 6.n de MySQL 5 & 6 implemento CREATE TRIGGER y DROP TRIGGER y nada más. De acuerdo con this hunk of Postgres documentation, no hay ni siquiera CREATE TRIGGER en SQL 92, por lo considérese afortunado para tener disparará a :-)

El Visual Studio MySQL plugin documentation tiene:

Para modificar un disparador existente, haga doble clic en un nodo del disparador que desea modificar, o haga clic con el botón derecho en este nodo y elija el comando Alter Trigger en un menú contextual. Cualquiera de los comandos abre el Editor de SQL.

... que parece hacer lo que usted quiere. Supongo que esto es azúcar GUI y detrás de las escenas obtienes un DROP CREATE.

En cuanto a un disparador para algunos UPDATE sy otros, SQL tiene exactamente un UPDATE por tabla. Ponga una cláusula IF al comienzo de su activador UPDATE para que su lógica, lo que sea que esté haciendo en algunos de sus UPDATE s, se ejecute solo cuando lo considere apropiado.

+0

Gracias por eso, había visto ese artículo en mis viajes. Aunque no estoy usando el plugin de Visual Studio. :(parece áspero No puedo editar las acciones en un desencadenante una vez creado. ¡No importa! – cw84

2

MySQL ha REPLACE TRIGGER, ¿verdad?

Como nota al margen ... ¿Es un problema? Si le preocupa que las consultas se ejecuten entre DROP y CREATE, siempre puede bloquear la tabla de antemano.

+0

¿Puedes bloquear la tabla? En MySQL, todas las sentencias DDL confirman implícitamente la transacción. A menos que me equivoque, las cerraduras se liberarán. the DROP TRIGGER ... – nathan

+0

Retiro eso. Lo analicé y parece que los bloqueos no se liberarán mediante las instrucciones DROP TRIGGER o CREATE TRIGGER. Se explica aquí: http://dev.mysql.com/doc/ refman/5.0/es/lock-tables-and-transactions.html – nathan

Cuestiones relacionadas