![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
||||
|
||||
|
En vez de adivinar, se investiga (cuando hay discusiones sobre el tema):
https://en.wikipedia.org/wiki/Isolat...tabase_systems) En resumen: Depende del motor, metodo de conexion y libreria de acceso. Las transacciones y su aislamiento afectan tambien las lecturas.
__________________
El malabarista. |
|
#2
|
||||
|
||||
|
A priori, una transacción se utiliza para ejecutar de forma atómica un conjunto de operaciones que deben ejecutarse, o todas juntas o ninguna. Y además debe asegurar que durante el proceso el resto del sistema no puede acceder a los datos "intermedios" de esas operaciones.
Según esta definición, a priori, no tendría mucho sentido realizar una transacción en un SELECT. El problema es que con el tiempo la cosa se ha ido complicando. Hay varios tipos de transacciones, generadas a partir de los bloqueos que producen, y diferentes formas de trabajar con ellas, en los diferentes SGBD's. Casimiro ha comentado el sistema de trabajo de Firebird+IBX. Por ejemplo, el de SQLServer+ADO es diferente. Las transacciones se inician manualmente y en los SELECT no es necesario realizarlas.
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi ![]() P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
|
#3
|
||||
|
||||
|
Hola, para mi no tiene sentido utilizar transacciones para realizar consultas. Se deberian utilizar solamente cuando es necesario asegurar que se completen una serie de operaciones conjuntas sobre la base. Asegurando que se realizan las dos operaciones o se vuelve al estado anterior.
Por ejemplo.. reservar un pasaje para un usuario y luego cambiar el estado de butaca involucrada a "ocupado" transferir dinero de una cuenta a otra, aumentanto el saldo de una +500 y disminuyendo el de la otra -500 Durante el comienzo de una transaccion se bloquean y duplican registros involucrados para poder realizar un rollback. Una transaccion que incluya un SELECT podria llegar (mas que seguro) a ocupar recursos en la base para poder llegar a deshacer una supuesta operacion sobre los registros aunque sea solo lectura en este caso. Espero haberme explicado. Saludos Nicolas Perichon |
|
#4
|
||||
|
||||
|
Cita:
Cita:
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal Última edición por Casimiro Noteví fecha: 10-10-2013 a las 10:14:35. |
|
#5
|
||||
|
||||
|
Cita:
Dejando de lado el motor y los componentes de acceso, creo que todos estamos de acuerdo en lo siguiente (si no, vamos a intentar concretarlo para saber de qué hablamos): * Una transacción BLOQUEA la/s tabla/s que usa para escritura. Nadie puede escribir en esas tablas mientras la tabla está en uso. * Todas las operaciones de una transacción se ejecutan de forma atómica. * Al ser atómica y bloqueante, una transacción debe ser lo más rápida y pequeña posible. Volvendo a lo comentado por Casimiro, yo creo que los SELECT no deben ir con transacciones (vuelvo a decir, independientemente de los que luego haga un SGBD o unos componente), porque no cumple nada de lo anterior: + Un SELECT (uno normal, al menos) no debe bloquear para escritura. + Un SELECT ya es de por sí, una operación atómica, unitaria. + Un SELECT no es precísamente (o no tiene porqué serlo) una operación rápida. Otra cosa, y creo que por ahí nos estamos liando, es que un determinado proceso de SELECT (1 o varios), requiera que una determinada tabla (o varias) no se modifique/n, y eso podamos "corregirlo" o "solucionarlo" con una transacción, pero creo que no es el caso habitual. Recordar también que una transación "añade" sobrecarga a una operación (más recursos, más tiempo, más proceso), por lo tanto, por definición, sólo debería usarse cuando sea estríctamente necesario.
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi ![]() P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
|
#6
|
||||
|
||||
|
Cita:
Aun cuando explicitamente no estes iniciando transacciones, el motor (o la libreria de acceso) *puede* que implicitamente lo haga. Ahora bien, las transacciones cuando se lee no es que le des "BEGIN TRAN" para hacer un SELECT (probablemente el mismo motor hace eso implicito), es que entiendas como el modo de aislamiento esta afectando todo.
__________________
El malabarista. |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| Diferencias entre usar o no Transacciones | MaMu | Varios | 29 | 29-04-2008 00:17:06 |
| Cuando y por que usar property | David | OOP | 6 | 01-11-2006 12:07:57 |
| ¿Cómo usar mejor las transacciones? | ferysil2003 | Firebird e Interbase | 13 | 14-06-2005 11:03:45 |
| Como usar transacciones | gario | SQL | 3 | 17-12-2003 20:52:29 |
| Como usar las transacciones que es lo correcto | azraelrvg | Firebird e Interbase | 1 | 21-10-2003 23:02:37 |
|