Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

canselar una insercion en un before triggers

Estas en el tema de canselar una insercion en un before triggers en el foro de Mysql en Foros del Web. buenas tardes, quisiera saber si se puede cancelar una inserción en una tabla con un trigger antes de insertar el registro si este registro ya ...
  #1 (permalink)  
Antiguo 20/01/2012, 11:40
 
Fecha de Ingreso: enero-2010
Mensajes: 247
Antigüedad: 14 años, 3 meses
Puntos: 2
canselar una insercion en un before triggers

buenas tardes, quisiera saber si se puede cancelar una inserción en una tabla con un trigger antes de insertar el registro si este registro ya fue insertado.

tengo una insercion de esta forma

insert into mitabla values('01','aaaaa'),('02','bbbbb'),('03','cccccc' ),('04','dddddd')

Si en la tabla "mitabla" ya esta guardado alguno de estos registros no debe guardarlo otra ves, con insert ignore no funciona ya que el primary key es un autoincremet y por ende es un registro distinto.

muchas gracias.
  #2 (permalink)  
Antiguo 20/01/2012, 12:22
Avatar de Ribon  
Fecha de Ingreso: septiembre-2010
Ubicación: El firmamento
Mensajes: 487
Antigüedad: 13 años, 7 meses
Puntos: 91
Respuesta: canselar una insercion en un before triggers

Existen varias formas "ilegales" de realizar esto pero la verdad no me convencen mucho, una de ellas por ejemplo es tener un campo que sea NOT NULL y en el new del trigger asignar a NULL el valor para ese campo lo que provocaría un error que obviamente tendrás que capturar para saber que fue disparado.

Esto puede incluso ser instalarle un virus a la señora normalización por lo que recomiendo mantenerse lejos de esta solución :P

Lo que recomiendo es que valides antes de hacer el insert que cumpla con las condiciones apra hacerlo (Ya sea en un procedimiento almacenado o bien en un script PHP, C#, Java, etc.) eso es más sano pero depende completamente de donde usarás esos insert.

Saludos.
  #3 (permalink)  
Antiguo 20/01/2012, 13:00
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: canselar una insercion en un before triggers

Como te dice Ribon, lo mejor (y lo que habitualmente se hace) es validar antes de mandar basura a la base.
Siempre.
Si no quieres validar en la aplicación, deberías hacerlo por medio de un SP, donde terminarías programando lo mismo, pero más rudimentariamente.
Lo que no puedes hacer, al menos en MySQL, es hacer un TRIGGER de ejecución condicional. No existen en este DBMS, y "romper" su ejecución, como bien te dice Ribon, es una muy mala idea.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 20/01/2012, 14:06
 
Fecha de Ingreso: enero-2010
Mensajes: 247
Antigüedad: 14 años, 3 meses
Puntos: 2
Respuesta: canselar una insercion en un before triggers

gracias el problema es que para validar antes de ingresar los registros sea en la aplicacion o en la base de datos retrasaria mucho la insercion ya que si son 100 registros que se van a ingresar son 100 validaciones que debe hacer.
  #5 (permalink)  
Antiguo 20/01/2012, 15:10
Avatar de Ribon  
Fecha de Ingreso: septiembre-2010
Ubicación: El firmamento
Mensajes: 487
Antigüedad: 13 años, 7 meses
Puntos: 91
Respuesta: canselar una insercion en un before triggers

Pero........ si haces la validación en el trigger no crees que también haría esa validación 100 veces?

de hecho para esas 100 en el FOR EACH ROW Vendría siendo exactamente lo mismo que un for en un procedimiento almacenado o en otro lenguaje.

saludos.

Etiquetas: registros, tabla, trigger
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:48.