You are on page 1of 5

Modificacin de la Base de Datos en SQL

1
TEMA 6: MODIFICACIN DE LA BASE DE DATOS EN SQL

5.6 MODIFICACIN DE LA BASE DE DATOS

SQL posee comandos destinados tambin para modificar la base de datos, entre estos se tienen
operaciones de borrado, insercin y actualizacin.

5.6.1 BORRADO

La operacin de borrado se expresa de igual manera que una consulta. Se pueden borrar slo
tuplas completas, es decir, no se pueden borrar valores de atributos concretos.

La expresin SQL relacionada con el borrado es:

delete from r where p

Donde r es una relacin y p es una condicin lgica que determina las tuplas a ser eliminadas
de r, si la condicin p es omitida, se eliminan todas la tuplas de r.

Hay que sealar que una orden delete opera slo sobre una relacin. Si se desea borrar tuplas
de varias relaciones, se deber utilizar una orden delete por cada relacin. El predicado de la
clusula where puede ser tan complicado como el where de cualquier clusula select, o tan
simple como una clusula where vaca.

Ejemplo: Borrar todas las tuplas de la relacin Prestamo (Los sistemas bien diseados
requerirn una confirmacin del usuario antes de ejecutar una consulta como esta).

Solucin: delete from Prestamo

Ejemplo: Borrar todas las cuentas de la Sucursal Subtiava

Solucin: delete from Cuenta where nombre_sucursal=Subtiava

Ejemplo: Borrar todas las cuentas de la Sucursal Subtiava

Solucin: delete from Cuenta where nombre_sucursal=Subtiava

Ejemplo: Borrar todos los prstamos en los que el monto del prstamo est entre C$ 5,000 y
C$ 10,000 crdobas.

Solucin: delete from Prestamo where importe between 5000 and 10000

Ejemplo: Borrar las cuentas de todas las sucursales de Granada

En este caso la solucin se genera mediante una subconsulta que muestra los nombres de las
sucursales ubicadas en Masaya. De modo que la expresin SQL requerida es:

Solucin: delete from Cuenta where nombre_sucursal in (select nombre_sucursal from
Sucursal where ciudad_sucursal = Granada)

Modificacin de la Base de Datos en SQL

2
En este borrado se selecciona primero todas las sucursales con sede en Granada y a
continuacin borra todas las tuplas Cuenta pertenecientes a esas sucursales.

5.6.1.1 Uso de funciones de agregacin en una subconsulta de borrado.

Ejemplo: Borrar todas las cuentas cuyos saldos sean inferiores a la media del banco

Solucin: delete from Cuenta where saldo < << <(select avg (saldo) from Cuenta)

La orden delete comprueba primero que cada tupla de la relacin Cuenta para comprobar si la
cuenta tiene un saldo inferior a la media del banco. A continuacin se borran todas las tuplas
que no cumplan la condicin anterior, es decir, las que representan una cuenta con un saldo
menor que la media. Es importante realizar todas las comprobaciones antes de llevar a cabo
ningn borrado.

5.6.2 INSERCIN

El comando SQL encargado de realizar la insercin de una ms tuplas en una relacin es el
comando insert, este tiene dos variantes:

Una para insertar una sola tupla indicando los valores de los atributos de forma explcita, la
forma general en este caso es insert into r values (tupla a insertar) en el caso de que se
respete el orden de los atributos en la relacin r,
En caso de que la tupla a insertar no respete ese orden, el nombre de los atributos se debe
listar tambin en el comando insert.

Para insertar datos en una relacin, o bien se especifica la tupla que se desea insertar o se
formula una consulta cuyo resultado sea el conjunto de tuplas que se desean insertar.
Obviamente, los valores de los atributos de las tuplas que se inserten deben pertenecer al
dominio de los atributos. De igual manera, las tuplas insertadas debern ser de la aridad
correcta.

La instruccin insert ms sencilla corresponde a la de insercin de una tupla.

Ejemplo: Insertar en la base los datos asociados a la cuenta C-0045 en la Sucursal Lon y que
tiene como saldo C$ 6000.00

Solucin Caso 1: insert into Cuenta values ( C-0045, Len, 6000)

En este ejemplo los valores se especifican en el mismo orden en que los atributos se listan en
el esquema de la relacin Cuenta. Para beneficio de los usuarios que no pueden recordar el
orden de los atributos se especifican en la clusula insert.

Solucin Caso 2: insert into Cuenta (nombre_sucursal, numero_cuenta, saldo) values
(Len,C-0045,6000)

Solucin: insert into Cuenta (numero_cuenta, nombre_sucursal, saldo) values (C-
0045,Len,6000)

Modificacin de la Base de Datos en SQL

3
El efecto es similar al ejemplo anterior con la diferencia de que se han listado explicitamente
los nombres de los atributos, esto debido a que en la clusula values no se ha guardado el
orden que estos tienen en la estructura de la tabla.

Generalmente se desea insertar las tuplas que resultan de una consulta.

Ejemplo: Si a todos los clientes que tienen un prstamo en la sucursal Subtiava se les quisiera
regalar, como gratificacin una cuenta de ahorro con C$ 5000.00 por cada cuenta de prstamo
que posee.

Solucin: insert into Cuenta select nombre_sucursal,numero_prestamo, 1000 from
Prestamo where nombre_sucursal = Subtiava
La instruccin select se evala primero, produciendo un conjunto de tuplas que a continuacin
se insertan en la relacin Cuenta. Cada tupla tiene un nombre_sucursal (Subtiava), un
numero_prestamo (que sirve como nmero para la nueva cuenta) y un saldo inicial de la
cuenta (C$ 1000).

Es necesario aadir tuplas a la relacin Impositor, a travs de la siguiente consulta:

Solucin: insert into Impositor select nombre_cliente, numero_prestamo from
Prestatario, Prestamo where Prestatario.numero_prestamo = Prstamo.numero_prestamo
and nombre_sucursal = Subtiava

Esta consulta inserta en la relacin Impositor una tupla (nombre_cliente, numero_prestamo)
por cada nombre_cliente que posea un prstamo en la sucursal Subtiva, con nmero de
prstamo numero_prestamo.

5.6.3 ACTUALIZACIONES

En determinadas situaciones puede ser necesario cambiar un valor dentro de una tupla, sin
cambiar todos los valores de la misma. Para este tipo de situaciones se utiliza la instruccin
update. Al igual que ocurre con insert y delete, se puede elegir las tuplas que van a ser
actualizadas mediante una consulta.

Forma general: Sea r una relacin y sea exp la expresin de actualizacin, entonces la forma
general del comando de actualizaciones:

update r set exp

Ejemplo: Realizar el pago de intereses anuales y todos los saldos se incrementen en un 5%,
habra que formular la siguiente consulta de actualizacin:

Solucin: update Cuenta set saldo=saldo * 1.05

Esta actualizacin se aplica una vez a cada tupla de la relacin Cuenta.

Ejemplo: Si se paga el inters slo a las cuentas con un saldo de C$ 1000 o superior, se puede
escribir la siguiente consulta.

Solucin: update Cuenta set saldo=saldo * 1.05 where saldo >=1000

Modificacin de la Base de Datos en SQL

4
En general la clusula where de la instruccin update puede contener cualquier constructor
legal en la clusula where de una instruccin select (incluyendo instrucciones select anidadas).
Como con delete e insert, un select anidado en una instruccin update puede referenciar la
relacin que se est actualizando. SQL, primero comprueba todas las tuplas de la relacin para
determinar las que deberan actualizar y despus la actualizacin.

Ejemplo: Pagar un inters del 5% a las cuentas cuyo saldo sea mayor que la media.

Solucin: update Cuenta set saldo=saldo * 1.05 where (saldo > select avg(saldo) from
Cuenta)

Ejemplo: Suponer que las cuentas con saldos superiores a C$ 5000 reciben un 6% de inters,
mientras que las dems cuentas recibirn un 5%.

Solucin: update Cuenta set saldo=saldo * 1.06 where saldo > 5000

Solucin: update Cuenta set saldo=saldo * 1.05 where saldo <= 5000

Tomar en cuenta, que el orden en el que se ejecutan dos instrucciones de actualizacin es
importante.
Este tipo de solucin tiene el inconveniente de que si se modifica el orden de las consultas de
actualizacin se pueden generar actualizaciones errneas. As si se realiza primero el
incremento del 5%, valores cercanos a 1000 pasaran a ser valores mayores de 1000 con lo cual
se les aplicara el 6% de incremento, llegndose a un incremento neto del 1.05 * 1.06 = 1.113
es decir el 11.3%, en lugar del 5% para evitar esta problemtica SQL cuenta con el comando
case muy similar al comando de los lenguajes de propsito general, as la expresin del
ejemplo anterior utilizando case es:

SQL ofrece una constructora case, que se puede usar para formular las dos instrucciones de
actualizacin en una instruccin de actualizacin.

Solucin: update Cuenta set saldo = case when saldo <= 10000 then saldo * 1,05 else saldo *
1.06 end

La forma general de la clusula case es:

case
when pred
1
then result
1

when pred
2
then result
2


when pred
n
then result
n

else result
0

end

En este caso se analizan cada uno de los predicados y si pred
i
es verdadero entonces se ejecuta
result
i
.
Por otra parte si ninguno es verdadero se ejecuta result
0.




Modificacin de la Base de Datos en SQL

5
5.7 TRANSACCIONES

Una transaccin es un conjunto de instrucciones SQL de consultas y actualizaciones que deben
de ejecutarse todas de forma exitosa o no ejecutar ninguna. La norma SQL especifica que una
transaccin comienza de forma implcita (no hay comando de comienzo) cuando se ejecuta una
instruccin SQL, la transaccin finaliza con cualquiera de las siguientes opciones dependiendo
de la decisin del usuario.

Commit: Compromete la Transaccin actual, es decir hace que los cambios realizados por la
transaccin sean permanentes en la base de datos. Despus de ejecutarse este comando
comienza una nueva transaccin de forma automtica

RollBack: Su efecto es retroceder la transaccin actual es decir deshace todas las
actualizaciones realizadas por las instrucciones SQL, de tal forma que la base de datos se
restaura al estado que exista previo a la primera instruccin de la transaccin.

You might also like