sql >> Base de Datos >  >> RDS >> Mysql

Desencadenadores de MySQL - Desencadenador DESPUÉS DE INSERTAR + UDF sys_exec() problema

Incluso si usa un disparador DESPUÉS, la fila aún no está confirmada. Pero sys_exec() no regresa hasta que finaliza el script php, por lo que el desencadenador AFTER no puede completarse, por lo tanto, tampoco puede confirmar INSERT.

Esto es por diseño. Después de todo, puede realizar más operaciones dentro de la misma transacción o puede revertir la transacción. Ese es el problema de invocar procesos externos desde un disparador:los procesos externos no pueden ver los datos dentro del alcance de la transacción en la base de datos.

No debe realizar esta tarea con un disparador. En el mejor de los casos, debe usar el activador para establecer una columna de "bandera" y luego escribir un proceso externo para buscar filas con la bandera establecida y luego invocar ese script PHP. De esa forma, solo se procesarán las filas que se hayan insertado Y confirmado con éxito.