¿Puedo iniciar un disparador en la statement de selección en mysql?

Estoy tratando de ejecutar una statement de inserción en la tabla X cada vez que selecciono cualquier registro de la tabla Y, de todos modos, ¿puedo lograr eso usando solo MYSQL? algo así como desencadenadores?

Gracias,

La respuesta corta es No. Los desencadenadores se activan con INSERT , UPDATE o DELETE .

Posible solución para este (raro) senario:

  • Primero, escriba algunos procedimientos almacenados que hagan los SELECT que desee en la tabla X.
  • Luego, restrinja a todos los usuarios a usar solo estos procedimientos almacenados y no les permita usar SELECT en la tabla X.
  • Luego modifique los procedimientos almacenados para llamar también a un procedimiento almacenado que realiza la acción que desea ( INSERT o lo que sea).

No, no puedes disparar con SELECT, tendrás que crear un procedimiento almacenado (o cualquier otro tipo de recurso de registro, como un archivo de registro o lo que sea) que invoques implícitamente en cualquier statement de consulta, más fácil si creas un contenedor que llama a su consulta, llama al registro y devuelve los resultados de la consulta.

Si intenta usar la tabla X para registrar el orden de las consultas SELECT en la tabla Y (una configuración de registro de consultas bastante común), puede simplemente invertir el orden de las operaciones y ejecutar primero la consulta INSERT , luego ejecute su consulta SELECT .

De esta forma, no necesita preocuparse por vincular las dos declaraciones con un TRIGGER : si su servidor falla entre las dos declaraciones, entonces ya ha registrado lo que le importa con su primera statement, y si la consulta SELECT ejecuta o falla no tiene impacto en la base de datos subyacente.

Si no está registrando consultas, quizás esté tratando de usar la tabla Y como una cola de tareas, la situación con la que estaba luchando que me lleva a este hilo, y desea las consultas de sesión Y primero para bloquear todas las demás sesiones. de las filas devueltas para que pueda realizar algunas operaciones en los resultados e insertar la salida en la tabla X. En ese caso, simplemente agregue algunas capacidades de registro a la tabla Y.

Por ejemplo, puede agregar una columna “propietario” a Y, luego viñeta la parte WHERE de su consulta SELECT a una instrucción UPDATE , ejecútela y luego modifique su consulta SELECT para mostrar solo los resultados que reclamó su UPDATE :

 UPDATE Y SET owner = 'me' WHERE task = 'new' AND owner IS NULL; SELECT foo FROM Y WHERE task = 'new' AND owner = 'me'; 

… trabaja un poco en foo, entonces …

 INSERT INTO X (output) VALUES ('awesomeness'); 

De nuevo, la clave es iniciar sesión primero , luego consultar.