2008-09-06 12 views
10

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 se deben tomar?Configuración de MySQL Triggers

Respuesta

15

Los disparadores le permiten realizar una función en la base de datos a medida que ocurren ciertos eventos (por ejemplo, un inserto en una tabla).

No puedo comentar en mysql específicamente.

Precaución: Los desencadenantes pueden ser muy atractivos, cuando empiezas a usarlos por primera vez, 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 que todavía haría uso de disparadores para

  • un seguimiento de "DATE_CREATED" y los campos "date_last_edited"
  • Inserción "ID" 's (en Oracle, donde no hay campo de identificación automática)
  • historial de cambios Keeping

cosas que no se desea utilizar disparadores para

  • reglas de negocio/Logic
  • cualquier cosa que conecta el exterior de la base de datos (por ejemplo, una llamada de servicio web)
  • Control de acceso
  • Todo lo que no es transaccional (cualquier cosa que haga en el disparador debe ser capaz de deshacer con la transacción)
0

Un desencadenador es un objeto de base de datos denominado que está asociado a 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; 


A pesar de que esta parte contesté la otra pregunta sigue en pie.

1

De dev.mysql.com, un disparador es

... un objeto de base de datos llamada es asociado con una mesa y que es activa cuando un evento particular se produce por la mesa.

La sintaxis para crearlos is also documented at that site.

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; 

Usted al menos tiene que cumplir con all the restrictions on stored functions. No podrá bloquear tablas, alterar vistas o modificar la tabla que activó el desencadenador. También desencadena may cause replication problems.

0

Esta pregunta es viejo y otras respuestas son muy buenos, pero ya que el usuario le preguntó acerca de las precauciones que se deben tomar, quiero añadir algo:

  • Si utiliza 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 se pueden 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.
Cuestiones relacionadas