update - Configurando los disparadores de MySQL
triggers mysql ejemplos pdf (4)
Desde dev.mysql.com , se activa un desencadenador
... un objeto de base de datos llamado que está asociado con una tabla y que se activa cuando ocurre un evento particular para la tabla.
La sintaxis para crearlos también está documentada en ese sitio .
Brevemente,
CREATE
[DEFINER = { user | CURRENT_USER }]
TRIGGER trigger_name trigger_time trigger_event
ON tbl_name FOR EACH ROW trigger_stmt
Y proporcionan un ejemplo:
CREATE TABLE account (acct_num INT, amount DECIMAL(10,2));
CREATE TRIGGER ins_sum BEFORE INSERT ON account FOR EACH ROW SET @sum = @sum + NEW.amount;
Al menos debe cumplir con todas las restricciones de las funciones almacenadas . No podrá bloquear tablas, alterar vistas o modificar la tabla que activó el desencadenador. También los desencadenantes pueden causar problemas de replicación .
He estado escuchando sobre desencadenantes y tengo algunas preguntas.
¿Qué son desencadenantes?
¿Cómo los configuro?
¿Hay alguna precaución, aparte de las cosas típicas de SQL, que debería tomarse?
Un desencadenante es un objeto de base de datos nombrado que está asociado con una tabla y que se activa cuando se produce un evento particular para la tabla.
Para crear un disparador:
CREATE TRIGGER triggerName [BEFORE|AFTER] [INSERT|UPDATE|DELETE|REPLACE] ON tableName FOR EACH ROW SET stuffToDoHERE;
Aunque respondí esta parte, la otra pregunta sigue en pie.
Los disparadores le permiten realizar una función en la base de datos a medida que suceden ciertos eventos (por ejemplo, una inserción en una tabla).
No puedo comentar en mysql específicamente.
Precaución: los desencadenantes pueden ser muy atractivos, cuando empiezas a usarlos parecen una solución mágica para todo tipo de problemas. Pero hacen que sucedan cosas "mágicas", si no conoce la base de datos al revés, puede parecer que suceden cosas realmente extrañas (como insertos en otras tablas, cambios en los datos de entrada, etc.). Antes de implementar cosas como desencadenante, consideraría seriamente aplicar el uso de una API alrededor del esquema (preferiblemente en la base de datos, pero afuera si no puede hacerlo).
Algunas cosas aún usaría disparadores para
- Hacer un seguimiento de los campos "date_created" y "date_last_edited"
- Insertar "ID" (en el oráculo, donde no hay un campo de identificación automática)
- Mantener el historial de cambios
Cosas que no le gustaría usar disparadores para
- reglas de negocios / lógica
- todo lo que se conecta fuera de la base de datos (por ejemplo, una llamada al servicio web)
- Control de acceso
- Cualquier cosa que no sea transaccional (cualquier cosa que haga en el desencadenante DEBE poder revertir con la transacción)
Esta pregunta es antigua y otras respuestas son muy buenas, pero como el usuario preguntó sobre las precauciones que deben tomarse, quiero agregar algo:
- Si usa la replicación en un entorno complejo, no haga un uso masivo de Triggers, y no llame a procedimientos almacenados desde desencadenadores.
- Los disparadores son lentos en MySQL.
- No puede usar algunas sentencias de SQL dentro de los desencadenadores. Y algunas declaraciones están permitidas, pero deben evitarse, como LOCK. La regla general es: si no comprende completamente las implicaciones de lo que está haciendo, no debe hacerlo.
- Los disparadores pueden causar bucles sin fin, así que ten cuidado.