Cita:
Iniciado por lotusxxl Una preguntilla..relacioanda con los triggers...
si tengo el siguiente trigger..
CREATE TRIGGER trig_down AFTER DELETE ON table1
FOR EACH ROW
UPDATE table2 SET campo1= campo1 - 1 WHERE id = OLD.id_table2;
si hago un.... DELETE FROM table1 WHERE campo2 = 3
y esta consulta borra por ejemplo 2 registros....el trigger se activará 2 veces?
Parece que tu usas otro DBMS, esa sintaxis no es de SQL Server. Pero asumiendo que trabajan de manera similar, la respuesta es no, se activará una sola vez.
Cita: también relacionado con el mismo trigger...
si entre table1 y table2 tengo una relación con DELETE CASCADE donde al eliminar una fila de la tabla 2..se eliminan todas las filas relacionadas con la tabla1...
entonces ese trigger se dispararà? ya q si he eliminado la fila no podrá ser actualizada..
espero haverme explicado minimamente bien.
gracias.
Se disparará, pero no hará nada, pues la sentencia no regresará ningún registro para trabajar (no verás mensaje de error, pues técnicamente no lo es).
Cita:
Iniciado por kakarot Pues no acabo de entenderlo, yo hago eso de: @id = id from deleted pq quiero recoger el identificador del registro a eliminar, y el update lo igualo a eso pq solo quiero que se modifique cuando hago un delete
¿Que sucede en el caso de que ejecutes algo como...
DELETE tabla WHERE llave IN (1,2,3,4,5)
Considerando que el trigger se dispara solo una vez (claro, pues es una sola sentencia)?
Obtendrás @id = 1, cosa que es falsa (y por lo tanto solo actualizarás el registro de id=1).
Si la respuesta es algo como "pero eso no va a pasar en mi programa porque yo no uso esas sentencias" es por lo que se considera un diseño débil. Tendrías que considerar todas las posibilidades.
Lo mismo sucederá en sentencias más "de la vida real", como correcciones a campos mal ingresados o fechas incorrectas.