Sie sind auf Seite 1von 3

Taller de base de datos

Práctica: Manejo de transacciones en SQL Server

1. Crear el siguiente esquema de base de datos.

CREATE DATABASE banmodelo;


USE banmodelo;

CREATE TABLE cliente(id INT PRIMARY KEY, nombre VARCHAR(50)


,apellidos VARCHAR(50), telefono VARCHAR(10));

CREATE TABLE cuenta(numCuenta VARCHAR(10) PRIMARY KEY, tipo VARCHAR(25), saldo


FLOAT,
idCliente INT FOREIGN KEY REFERENCES cliente(id));

CREATE TABLE movimiento (


numCuenta VARCHAR(10) NOT NULL,
numCuenta2 VARCHAR(10) NOT NULL,
importe FLOAT,
fecha DATE,
PRIMARY KEY (numCuenta, numCuenta2),
CONSTRAINT FK_MOV
FOREIGN KEY (numCuenta)
REFERENCES cuenta (numCuenta),
CONSTRAINT FK_MOV2
FOREIGN KEY (numCuenta2)
REFERENCES cuenta (numCuenta));

2. Insertar los siguientes datos:

INSERT INTO cliente VALUES(1,'Daniel','Martinez','9991970752');


INSERT INTO cliente VALUES(2,'Alan','Brito','9999123456');

INSERT INTO cuenta VALUES(7685,'debito',6500,1);


INSERT INTO cuenta VALUES(1287,'credito',7500,1);
INSERT INTO cuenta VALUES(7690,'debito',4500,2);
Taller de base de datos

3. Ejecutar la siguiente transacción.


--Transacción al hacer una transferencia a una cuenta existente en la BD

BEGIN TRANSACTION
BEGIN TRY
--1)Descontar de la cuenta origen
UPDATE cuenta SET saldo=saldo -2500 WHERE numCuenta=7685;

--2) Abonarlo a la cuenta destino


UPDATE cuenta SET saldo=saldo + 2500 WHERE numCuenta=7690;

--3) Insertar el movimiento


INSERT INTO movimiento VALUES(7685,7690,2500, '2019-03-28');

PRINT 'TRANSACCION EXITOSA'


COMMIT TRANSACTION
END TRY

BEGIN CATCH
ROLLBACK TRANSACTION
PRINT 'OCURRIO UN ERROR EN LA TRANSACCION'
END CATCH

4. Ejecutar las siguientes consultas y verificar que el saldo de las 2 cuentas se ha


actualizado y se ha insertado un nuevo movimiento.
SELECT * FROM cuenta;
SELECT * FROM movimiento;

5. Ejecutar la siguiente transacción.


--Transacción al hacer una transferencia a una cuenta no existente en la BD

BEGIN TRANSACTION
BEGIN TRY
--1)Descontar de la cuenta origen
UPDATE cuenta SET saldo=saldo -1500 WHERE numCuenta=7685;

--2) Abonarlo a la cuenta destino


UPDATE cuenta SET saldo=saldo + 1500 WHERE numCuenta=1000;
Taller de base de datos

--3) Insertar el movimiento


INSERT INTO movimiento VALUES(7685,1000,1500, '2019-03-28');

PRINT 'TRANSACCION EXITOSA'


COMMIT TRANSACTION
END TRY

BEGIN CATCH
ROLLBACK TRANSACTION
PRINT 'OCURRIO UN ERROR EN LA TRANSACCION'
END CATCH

Como podemos observar el numCuenta 1000 no existe en la tabla cuentas, lo cual causa
un error en la transacción y se ejecuta la instrucción ROLLBACK, deshaciendo los cambios.
6. Verificar que no se hacen cambios en las cuentas y no se inserta el movimiento.

Das könnte Ihnen auch gefallen