Cita: 1) Las transacciones solo se pueden hacer en SP, no? en triger o cualquier otra función no existen verdad?
En MySQL, al menos, un TRIGGER no puede llamar a una transaccion.
Sí puedes iniciar una transacción por fuera del SP (a nivel programático) y cerrar el commint una vez que el resultado ha sido el esperado.
Lo que viene bien para esto último es hacer un control de flujo de ejecuciones por medio del ROW_COUNT(), por ejemplo, que devuelve la cantidad de registros afectados por la sentencia.
Cita: 2) Si hay algún insert que falla, (ej. el número dos) automáticamente se hace rollback de todo, o tengo que indicárselo en algún lado?
Si cierras las conexión sin COMMIT, el ROLLBACK es implícito. normalmente lo mismo ocurre si el SP se corta o sale sin el COMMIT correspondiente.
Cita: 3) Existe alguna forma de confirmar que el procedimiento ha ido bien? generar algún tipo de respuesta TRUE o FALSE para que yo desde PHP pueda saber si se ejecutó correctamente?
Eso es medio obvio: SI una ejecución de sentencia (un SP es invocado como sentencia) se ejecuta bien, el valor del
result de esa llamada es siempre TRUE... Pero eso lo peudes ver en el manual de PHP.