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
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)
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.
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.
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.
- 1. Depuración de MySQL Triggers
- 2. WPF Triggers
- 3. ¿El motor MySQL InnoDB queue DB DB Triggers automáticamente?
- 4. django-signals vs triggers?
- 5. Configuración de Sonar MySQL
- 6. CanCan load_and_authorize_resource triggers Forbidden Attributes
- 7. Entity Framework con En lugar de triggers
- 8. Configuración óptima de MySQL (my.cnf)
- 9. Configuración de Mysql ++ en Linux
- 10. guardando la configuración de MySQL
- 11. Cascade on ¿Eliminar o usar Triggers?
- 12. configuración global sql_mode en mysql
- 13. MySQL: Configuración del Servidor de administración - COMO
- 14. Configuración de Doctrine 2 con MySQL
- 15. anidada Sección de configuración App.config
- 16. generando estilos WPF que contienen Triggers del código C#
- 17. IE bug triggers haz clic para 2 botones?
- 18. configuración de la tabla de latitud y longitud de MySQL
- 19. Configuración óptima de tablas temporales de MySQL (tablas de memoria)?
- 20. MySQL: configuración de time_zone en my.cnf archivo de opciones
- 21. configuración Jboss origen de datos para MySQL - elemento MysqlXADataSource
- 22. restablecer contraseña de root con configuración mysql incorrecta
- 23. MySQL: ¿cómo veo qué archivos de configuración se utilizan?
- 24. Configuración de Apache/MySQL/PHP compartida en arranque múltiple
- 25. ¿MySQL incluido con MAMP no incluye un archivo de configuración?
- 26. ¿Cómo eliminar completamente MySQL con archivos de configuración y biblioteca?
- 27. comando mysql para mostrar las variables de configuración actuales
- 28. MySQL deshabilita todos los desencadenantes
- 29. Configuración del sitio Django/MySQL para usar UTF-8
- 30. Configuración del servidor MySQL para evitar el "servidor MySQL se ha ido" error