Práctica de Transacciones y Concurrencia en Oracle y MySQL
Desde el simbolo del sistema de Windows
Ejemplo de transacciones en Oracle
Ejemplo de transacciones en MySQL
3. Contenido
Transacciones y Concurrencia en MYSQL................................................................................................... 4
Preparando el espacio de trabajo............................................................................................................ 4
Inicio de las transacciones y concurrencia............................................................................................... 5
Transacciones y Concurrencia en ORACLE............................................................................................... 12
4. TRANSACCIONES Y CONCURRENCIA EN MYSQL
Preparando el espacio de trabajo
Para este ejemplo crearemos una base de datos llamada banco, con los siguientes atributos:
La creamos en la computadora que ara el papel de Servidor.
Pasamos a agregar usuarios que se conectarán o tendrán permisos a la base de datos con la siguiente regla;
CREATE USER 'nombredeusuario'@'direccion-ip' IDENTIFIED BY 'contraseña';
En nuestro caso particular ejecutamos:
CREATE USER 'usuario'@'localhost' IDENTIFIED BY 'chk';
Después de haber creado el usuario, le concedemos los privilegios que nosotros consideremos que de tener
dicho usuario con la siguiente sentencia:
GRANT [permiso] ON [nombre de base de datos].[nombre tabla] TO ‘nombre_usuario’@’direccion_IP’;
En nuestro caso particular ejecutamos:
GRANT SELECT, INSERT, UPDATE, DELETE ON base_datos.* TO 'francisco'@'19 2.168.1.88' REQUIRE
NONE WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0
MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0;
5. Inicio de las transacciones y concurrencia
Hasta este momento ya tenemos el servidor corriendo, y también la base de datos está creada.
Iniciamos desde la computadora que se conectará al servidor, para que desde ahí podamos insertar los
datos a la tabla.
Se conectó correctamente.
Procedemos a iniciar con la transacción:
Realizamos las siguientes instrucciones SQL para insertar los registros a la tabla banco:
Iniciamos la transacción:
BEGIN TRANSACTION;
Insertamos el primer:
INSERT INTO cuentas (accdId, balance) VALUES(101,200);
6. A pesar de que ya señaló que se insertó un Query, no ha terminado la transacción y el registro no se ha
insertado a la base de datos.
Lo vemos en el Servidor.
Insertamos el segundo registro desde el usuario externo:
INSERT INTO cuentas (accdId, balance) VALUES(102,200);
Como podemos ver, se insertó el segundo registro, pero aún no ha terminado la transacción, se hizo un
select y muestra la tabla con los registros previamente insertados. Si lo vemos desde el servidor obtenemos
lo siguiente:
No muestra los registros, es decir aún no se han agregado a la base de datos, ahora hacemos COMMIT,
desde la computadora conectada al servidor para terminar la transacción:
7. Como ven, se terminó la transacción y se hizo el SELECT para comprobarlo. Ahora hacemos un SELECT
desde el servidor.
Y como pueden observar ahora si aparecen los registros.
Ahora haremos algo similar, pero ahora con una transacción con UPDATE, es decir pasaremos 100 que tiene
el ID 101 al ID 102.
Desde la computadora conectada al servidor hacemos:
BEGIN TRANSACTION;
UPDATE cuentas SET balance = balance - 100 WHERE acctId = 101;
8. Se hace un SELECT y se observa que ya se realizó la consulta. Pero sólo lo guarda en el buffer de memoria,
más no en la base de datos.
Ahora le pasamos esos 100 a ID 102:
UPDATE cuentas SET balance = balance + 100 WHERE acctId = 202;
Si hacemos SELECT desde el servidor:
9. Sigue igual. Ahora hacemos un ROLLBACK desde la computadora conectada al servidor.
COMMIT;
Se terminó la transacción pero digamos que algo salió mal, es por eso que no se guardaron los cambios y
todo volvió a como estaba antes de que iniciara la transacción.
Ahora simularemos algún error, para que veamos que sucede con los registros. Aremos lo mismo que lo
anterior sólo que cuando insertemos el primer registro, cortaremos su red para que se pierda la conexión
con el servidor.
10. Hacemos un SELECT en el servidor:
No se insertaron los registros, es decir cuando sucedió la desconexión, se aplicó ROLLBACK
automáticamente para que la cuenta con ID 101 no perdiera, por decirlo así no perdiera su dinero.
11.
12. TRANSACCIONES Y CONCURRENCIA EN ORACLE
Preparando el espacio de trabajo
Al igual que en MYSQL crearemos un usuario el cual se conectará al servidor, para que desde ahí se realicen
las transacciones.
Procedemos a iniciar con la transacción: Realizamos las siguientes instrucciones SQL para insertar los
registros a la tabla pieza.
Iniciamos la transacción:
Set transaction name ‘base’;
Insertamos el primer y segundo registro
13. A pesar de que ya señaló que se insertó una consulta, no ha terminado la transacción y el registro no se ha
insertado a la base de datos.
Lo vemos en el Servidor.
Ahora hacemos un commit desde la computadora conectada al servidor.
14. Hacemos un SELECT en el servidor.
Y como vemos ya se inseeron los registros al finalizar la transacción.