tipos - ¿Deberían las aplicaciones web usar transacciones SQL explícitas?
transacciones mysql (6)
Debería usar transacciones ya que diferentes usuarios golpearán la base de datos al mismo tiempo. Yo recomendaría que no uses el autocommit. Use corchetes de transacción explícitos. En cuanto a la resolución de cada transacción, debe poner entre paréntesis una unidad de trabajo particular (lo que eso signifique en su contexto).
También es posible que desee examinar los diferentes niveles de aislamiento de transacciones que admite su base de datos SQL. Ofrecerán una gama de comportamientos en términos de lo que los usuarios ven de registros parcialmente actualizados.
Considere la posibilidad de una aplicación web normal que realiza principalmente operaciones CRUD basadas en formularios sobre bases de datos SQL. ¿Debería haber una gestión explícita de las transacciones en dicha aplicación web? ¿O debería simplemente usar el modo de confirmación automática? Y si se realizan transacciones, ¿es suficiente la "transacción por solicitud"?
Depende de cómo se realice el tratamiento CRUD, si y solo si todas las creaciones y modificaciones de las instancias del modelo se realizan en una sola consulta de actualización o inserción, puede usar la confirmación automática.
Si se trata de CRUD en el modo de consultas múltiples (una mala idea, IMO), entonces ciertamente debe definir las transacciones de forma explícita, ya que estas consultas serían ''transaccionalmente relacionadas'', no querrá terminar con un medio modelo en su base de datos. . Esto es relevante porque algunos marcos web tienden a hacer las cosas como la "consulta múltiple" por varias razones.
En cuanto a qué modo de transacción utilizar, depende de lo que pueda admitir en términos de vistas de datos (es decir, qué tan actual los datos deben ser cuando los clientes lo vean) y lo que tendrá que respaldar en términos de rendimiento.
Esto generalmente se maneja para mí en la capa de interfaz de la base de datos: la aplicación web raramente llama a múltiples procedimientos almacenados dentro de una transacción. Por lo general, llama a un único procedimiento almacenado que gestiona toda la transacción, por lo que la aplicación web solo debe preocuparse por si falla.
Por lo general, la aplicación web no tiene acceso a otras cosas (tablas, vistas, procedimientos almacenados internos) que podrían permitir que la base de datos se encuentre en un estado inválido si se intentaron sin estar envueltos en una transacción iniciada en el nivel de conexión por el cliente antes a sus llamadas.
Hay excepciones a esto donde la aplicación web inicia una transacción, pero en general son pocas y distantes.
Recomiendo usar el modo de transacción para la integridad de datos segura porque el modo de confirmación automática puede causar el ahorro parcial de datos.
Solo utilizaría transacciones explícitas cuando haga cosas que son realmente transaccionales , por ejemplo, emitir varios comandos SQL que están altamente interrelacionados. Supongo que el ejemplo clásico de esto es una aplicación bancaria: retirar dinero de una cuenta y depositarlo en otra cuenta siempre debe tener éxito o fracasar como un lote, de lo contrario, alguien es estafado.
Usamos transacciones en SO, pero solo con moderación. La mayoría de nuestras actualizaciones de bases de datos son independientes y atómicas. Muy pocas tienen las propiedades del ejemplo bancario anterior.
es mejor insertar / actualizar en varias tablas en un solo procedimiento almacenado. De esta forma, no es necesario administrar las transacciones desde la aplicación web.